Как обновить модель при привязке к ViewModel?

У меня есть подпись метода действия [HttpPost] , подобная этой:

[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
   // Save the edited Post.
}

Теперь, в прошлом (когда я не использовал ViewModels, например R&D), у меня была реализация метода Edit вроде этого:

[HttpPost]
public ActionResult Edit(Post model)
{
    var existingPost = repo.Find(model.Id);
    TryUpdateModel(existingPost);
    repo.Save(existingPost);  
    return RedirectToAction("Success", existingPost.Id);
}

который отлично работал.

Но я не понимаю, как адаптировать вышесказанное к подходу ViewModel.

] Если я сделаю это:

TryUpdateModel(existingPost)

С моим подходом ViewModel ничего особенного не произойдет. Ошибок нет, но ничего не обновляется, потому что MVC не знает, как обновить сообщение из ExistingPostViewModel (раньше было сообщение -> сообщение ).

Теперь, я использую AutoMapper. Поэтому я подумал, что могу отобразить из ViewModel в сообщение , а затем сохранить сообщение.

Но тогда я в основном отвергаю все. Чего я не хочу делать, и это лишает смысла урезанную ViewModel.

Может ли кто-нибудь меня сбить с толку?

Это похоже на действительно распространенный сценарий, и я совершенно не понимаю, как люди его решают. Я вижу только 3 возможных решения:

  1. Не используйте ViewModel в HTTP POST.Как я уже сказал, я делал это в прошлом для исследований и разработок, и это работает, но теперь я вижу, как развивались мои представления (проверка, простота), и я не могу пойти на компромисс только ради этой проблемы.

  2. Не используйте TryUpdateModel. Возможно, но тогда как мне объединить изменения?

  3. Используйте слева направо. Фу. Но на данный момент, похоже, я склоняюсь к этому.

Кто-нибудь, дайте мне решение №4! :)

Кстати, я использую ASP.NET MVC 3, Razor и Entity Framework.

15
задан Animesh 15 January 2012 в 08:16
поделиться