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 !
        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 :


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: