我有一个控制器,其中有两个同名的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方法
答案 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请求,以检查页面是否已完全加载以显示进度条,当从布局中删除那部分代码时,它运行良好,而没有两次调用任何操作方法。