开发者

How should posted data be modeled in MVC?

开发者 https://www.devze.com 2023-03-23 10:57 出处:网络
I think I get the idea of the ViewModel in MVC but, when doing updates and deletes, it seems like there should be a distinct model for posting to the controller. I noticed the default razor controll开

I think I get the idea of the ViewModel in MVC but, when doing updates and deletes, it seems like there should be a distinct model for posting to the controller. I noticed the default razor controll开发者_如何转开发ers use ViewBag to hold Selectlists.

I guess that makes the ViewModel (domain entities really) reusable on the return trip because it is stripped of unnecessary data. But it seems like resorting to ViewBag doesn't make sense when using view models because the view model can contain the Selectlists and such.

So my question is what kinds of patterns are there for making distinct "posted data" models? (got this term from Esposito's MVC 2 book) And how should the posted data model be related to the view models? For example, it seems like I will try including the posted data models with the view models. I'm new to MVC and not coming from a web-forms background either. I would really like to understand the best patterns for modeling the data that will be sent to the controller.


Often I use the same view model for passing it to the Edit/Update view and receiving it in the POST action. Here's the commonly used pattern:

public ActionResult Edit(int id)
{
    DomainModel model = ... fetch the domain model given the id
    ViewModel vm = ... map the domain model to a view model
    return View(vm);
}

[HttpPost]
public ActionResult Edit(ViewModel vm)
{
    if (!ModelState.IsValid)
    {
        // there were validation errors => redisplay the view
        // if you are using dropdownlists because only the selected
        // value is sent in the POST request you might need to 
        // repopulate the property of your view model which contains
        // the select list items
        return View(vm);
    }

    DomainModel model = ... map the view model back to a domain model
    // TODO: process the domain model

    return RedirectToAction("Success")
}

As far as the mapping between the domain model and view models is concerned I would recommend you AutoMapper.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号