@Url.Action( "Action" , "Controller" ) 调用具有相同名称的 post 和 get 方法



我有一个控制器,其中有两个与HttpPost和HttpGet同名的操作方法,如下所示,当调用与@Url.Action("DoSomething","Controller")的链接时,两个方法都被调用,我如何只调用GET方法?

是否存在在@URL.Action或任何其他方式中传递GET或POST类型的方法?

[HttpGet]
public ActionResult DoSomething(int ? MyParam)
{
}
[HttpPost]
public ActionResult DoSomething(MyModel Model)
{
}

在Razor视图中当我建立类似的链接时

<a href="@Url.Action("DoSomething","Home",new { MyParam= Whatever})">JustDoIt</a>

然后它调用POST和GET方法,即使在将参数指定为int而不是模型之后也是如此

尝试在表单声明中添加post:

@using (Html.BeginForm("DoSomething","Controller", FormMethod.Post))
{
}

或使用HTML:

<form action="@Url.Action("DoSomething","Controller")" method="POST">
... 
</form>

HTTP谓词POST/GET将把您的请求路由到适当的操作。默认值为GET。

我认为您可能会将Url.Action()Html.Action()混淆(如果我错了,请道歉(。正如有人在评论中提到的那样,Url.Action()只会根据用于构建锚标记的参数来呈现URL。另一方面,Html.Action()将在服务器端为响应构建页面时调用一个操作,我猜这也是您所指的。

如果是这种情况,那么您需要通过指定路由值来指定DoSomething()的Action参数,如下所示:

@Html.Action("DoSomething", "Home", new {MyParam = 2} )

DoSomething(int MyParam)的结果将被注入到页面中。Html.Action不打算调用POST,因此不可能在用POST动词修饰的Action上使用它。

问题是我又收到了一个ajax请求,检查页面是否已完全加载以显示进度条,当从布局中删除该部分代码时,它一直运行良好,没有调用任何操作方法两次。

最新更新