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?
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.
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.
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...
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>