У меня есть подпись метода действия [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 возможных решения:
Не используйте ViewModel в HTTP POST.Как я уже сказал, я делал это в прошлом для исследований и разработок, и это работает, но теперь я вижу, как развивались мои представления (проверка, простота), и я не могу пойти на компромисс только ради этой проблемы.
Не используйте TryUpdateModel. Возможно, но тогда как мне объединить изменения?
Используйте слева направо. Фу. Но на данный момент, похоже, я склоняюсь к этому.
Кто-нибудь, дайте мне решение №4! :)
Кстати, я использую ASP.NET MVC 3, Razor и Entity Framework.