Html.Action - Get versus Post

2019-03-23 12:25发布

I do this very often:

<div id='Product'>
@Html.Action("Create", "Product")
</div>

it's convenient because I can delegate the painting of a product creation form to another controller action for embedding in places. However, I'm having issues in that the method will sometimes (I haven't figured out under what conditions) call the [HttpPost] of my controller action, which of course fails.

Is there a way to force @Html.Action() to call the GET version?

4条回答
Rolldiameter
2楼-- · 2019-03-23 12:36

Try adding the AcceptVerbs attribute to your action:

[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult Create()
{
    //Your code
}

This will work for both GET and POST requests.

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-03-23 12:41

I also got into a similar problem and there indeed is a solution. Just Check whether Request is get or POST in View using IsPost Property and VOILA....

@if(!IsPost)    
{    
    HTML.Action("ActionName")    
}

Regards to whoever got in similar problem...

查看更多
乱世女痞
4楼-- · 2019-03-23 12:43

The way Html.Action works is that if the current request for the page is a post method then it will search for the method with the name HttpPost.

So what's happening is that you're POSTing the current page and the action likewise assumes all actions that should execute must be a POST too.

There's no way I know of to force it to switch to a different method like that.

查看更多
Anthone
5楼-- · 2019-03-23 12:53

I just encountered this issue, which was hard to identify. I ended up using Html.RenderPartial instead, like this:

<div id='Product'>
@{Html.RenderPartial("_CreatePartial", new Product());}
</div>
查看更多
登录 后发表回答