Asp.net mvc 3 Action-Get与Post
我经常这样做:Asp.net mvc 3 Action-Get与Post,asp.net-mvc-3,razor,controller-action,Asp.net Mvc 3,Razor,Controller Action,我经常这样做: <div id='Product'> @Html.Action("Create", "Product") </div> @动作(“创建”、“产品”) 这很方便,因为我可以将产品创建表单的绘制委托给另一个控制器操作,以便嵌入到位。然而,我遇到的问题是,该方法有时(我还不知道在什么条件下)会调用我的控制器操作的[HttpPost],这当然会失败 有没有办法强制@Html.Action()调用GET版本?Html.Action的工作方式是,如果页面的当前请
<div id='Product'>
@Html.Action("Create", "Product")
</div>
@动作(“创建”、“产品”)
这很方便,因为我可以将产品创建表单的绘制委托给另一个控制器操作,以便嵌入到位。然而,我遇到的问题是,该方法有时(我还不知道在什么条件下)会调用我的控制器操作的[HttpPost],这当然会失败
有没有办法强制@Html.Action()调用GET版本?Html.Action的工作方式是,如果页面的当前请求是一个post方法,那么它将搜索名为
HttpPost
的方法
因此,发生的情况是,您正在发布当前页面,并且该操作同样假定所有应该执行的操作也必须是一个POST
据我所知,没有办法强迫它切换到另一种方法 尝试将
AcceptVerbs
属性添加到您的操作中:
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult Create()
{
//Your code
}
这对GET和POST请求都有效。我刚刚遇到了这个问题,很难确定。我最终使用了Html.RenderPartial,如下所示:
<div id='Product'>
@{Html.RenderPartial("_CreatePartial", new Product());}
</div>
@{Html.RenderPartial(“_CreatePartial”,new Product());}
我也遇到了类似的问题,确实有解决办法。
只需使用IsPost属性和VOILA检查请求是get还是POST
@if(!IsPost)
{
HTML.Action("ActionName")
}
至于遇到类似问题的人……是的,我确实想出来了。对他们来说,这是一个可怕的假设。我最后做的是重命名操作,这样就不会有歧义,这可能是最好的解决方案。很高兴能帮上忙。嗯。。。是的,但这会迫使我将两种行为编码到同一个方法中。。。这意味着我需要一种方法来判断是否执行了Post或Get。。。如何做到这一点?