Html.Action - Get versus Post

2019-03-23 12:34发布

问题:

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?

回答1:

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.



回答2:

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:

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:

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>