[英]@Url.Action(“Action”,“Controller”) calls both post and get method with same name
我有一个控制器,其中有两个同名的HttpPost和HttpGet动作方法,如下所示,当@Url.Action("DoSomething","Controller")
链接时,两个方法都被调用,我该如何调用只有GET方法?
无论如何,可以通过@URL.Action
或其他方式传递GET或POST类型?
[HttpGet]
public ActionResult DoSomething(int ? MyParam)
{
}
[HttpPost]
public ActionResult DoSomething(MyModel Model)
{
}
在Razor View中建立链接时
<a href="@Url.Action("DoSomething","Home",new { MyParam= Whatever})">JustDoIt</a>
然后,即使将参数指定为int而不是模型,它也会调用POST和GET方法
尝试在表单声明中添加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.Action()
将仅基于用于构建锚标签的参数来呈现URL。 另一方面, Html.Action()
将在服务器端为响应构建页面时调用一个动作,我猜这也是您所引用的内容。
如果是这种情况,那么您将需要通过指定如下所示的路由值来为DoSomething()
指定Action的参数:
@Html.Action("DoSomething", "Home", new {MyParam = 2} )
DoSomething(int MyParam)
的结果将被注入到页面中。 Html.Action
并非旨在调用POST
因此无法在已用POST
动词修饰的Action上使用它。
问题是我又有一个ajax请求来检查页面是否已完全加载以显示进度条,当从布局中删除该部分代码时,它工作良好,而没有两次调用任何操作方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.