How do I repopulate the view model in ASP.NET MVC 2 after a validation error?

Posted by Keltex on Stack Overflow See other posts from Stack Overflow or by Keltex
Published on 2010-03-15T16:02:39Z Indexed on 2010/03/15 16:19 UTC
Read the original article Hit count: 455

Filed under:
|
|

I'm using ASP.NET MVC 2 and here's the issue. My View Model looks something like this. It includes some fields which are edited by the user and others which are used for display purposes. Here's a simple version

public class MyModel 
{
    public decimal Price { get; set; } // for view purpose only

    [Required(ErrorMessage="Name Required")]
    public string Name { get; set; }
}

The controller looks something like this:

public ActionResult Start(MyModel rec)
{
    if (ModelState.IsValid)
    {
        Repository.SaveModel(rec);
        return RedirectToAction("NextPage");
    }
    else
    {
        // validation error
        return View(rec);
    }
}

The issue is when there's a validation error and I call View(rec), I'm not sure the best way to populate my view model with the values that are displayed only.

The old way of doing it, where I pass in a form collection, I would do something like this:

public ActionResult Start(FormCollection collection)
{
    var rec = Repository.LoadModel();
    UpdateModel(rec);
    if (ModelState.IsValid)
    {
        Repository.SaveModel(rec);
        return RedirectToAction("NextPage");
    }
    else
    {
        // validation error
        return View(rec);
    }
}

But doing this, I get an error on UpdateModel(rec): The model of type 'MyModel' could not be updated.

Any ideas?

© Stack Overflow or respective owner

Related posts about asp.net-mvc-2

Related posts about validation