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

时间:2018-08-02 14:01:49

标签: c# asp.net asp.net-mvc

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

反正有通过@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>

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

3 个答案:

答案 0 :(得分:2)

尝试在表单声明中添加帖子:

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

或使用HTML:

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

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

答案 1 :(得分:1)

我认为您可能将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上使用它。

答案 2 :(得分:0)

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