Geeks With Blogs
Etienne Giust's .NET notes Some .NET tips and tricks for me to remember. That might help you too

 

With MVC3, I came over that problem where I was rendering a view with an updated model at the end of an HttpPost and the changes to the model were never applied to the rendered view :

 

NOT working as expected !
[HttpPost]
        public ActionResult Edit(JobModel editedJobModel)
        {
            // Update some model property
            editedJobModel.IsActive = true;
            
            // The view will NOT be updated as expected
            return View(editedJobModel);
        }

 

This is the standard behavior. In MVC3, POSTing the model does not render the Html helpers again. In my example, a HiddenFor bound to the IsActive value will not have its value set to true after the view is rendered.

 

Are you stuck, then ?

 

Well, for one, you’re not supposed to do that: in an ideal world you are supposed to apply the Post/Redirect/Get pattern. You would redirect to a new GET after your POST performed its actions. That’s what I usually do, but sometimes, when maintaining code and implementing slight changes to a pre-existing and tested logic, one prefers to keep structural changes to a minimum.

 

If you really have to (but my advice is to try to implement the PRG pattern whenever possible), here is a solution to alter values of the model on a POST and have the MVC engine render it correctly :

 

Solution
[HttpPost]
public ActionResult Edit(JobModel editedJobModel)
{
    // NOT WORKING : Update some model property
    //editedJobModel.IsActive = true;

    //Force ModelState value for IsActive property
    ModelState["IsActive"].Value = new ValueProviderResult(true, "True", null);
    
    // The view will be updated as expected
    return View(editedJobModel);
}

 

As you can see, it is a “dirty” solution, as the name (as a  string) of the updated property is used as a key of the ModelState dictionary.

Also, the use of ValueProviderResult is not that straightforward.

 

But hey, it works.

Posted on Wednesday, July 11, 2012 12:34 AM | Back to top


Comments on this post: Update the model on HttpPost and render the changes in the View

No comments posted yet.
Your comment:
 (will show your gravatar)


Copyright © Etienne Giust | Powered by: GeeksWithBlogs.net