Как смоделировать опубликованные данные в MVC? - PullRequest
0 голосов
/ 27 июля 2011

Мне кажется, я понял идею ViewModel в MVC, но при выполнении обновлений и удалений создается впечатление, что должна быть отдельная модель для отправки на контроллер. Я заметил, что контроллеры бритвы по умолчанию используют ViewBag для хранения списков выбора.

Я предполагаю, что это делает ViewModel (сущности домена) повторно используемыми в обратном путешествии, потому что он лишен ненужных данных. Но кажется, что использование ViewBag не имеет смысла при использовании моделей представления, потому что модель представления может содержать Selectlist s и тому подобное.

Итак, мой вопрос - какие существуют модели для создания отдельных моделей "опубликованных данных"? (этот термин взят из книги Esposito MVC 2). И как модель опубликованных данных должна быть связана с моделями представлений? Например, похоже, что я попытаюсь включить опубликованные модели данных в модели представлений. Я новичок в MVC и тоже не из web-forms фона. Мне бы очень хотелось понять лучшие шаблоны для моделирования данных, которые будут отправлены на контроллер.

1 Ответ

2 голосов
/ 27 июля 2011

Часто я использую одну и ту же модель представления для передачи ее в представление редактирования / обновления и получения ее в действии POST.Вот обычно используемый шаблон:

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")
}

Что касается сопоставления между моделью домена и моделями представления, я бы порекомендовал вам AutoMapper .

...