У меня есть подпись метода действия [HttpPost]
, как это:
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
В прошлом (когда я не использовал ViewModels, например R & D), у меня была реализация метода Изменить, как это:
[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 не знает, как обновить Post
от ExistingPostViewModel
(до того, как он был Post
→ Post
).
Теперь я использую AutoMapper. Поэтому я думал, что смогу отобразить из ViewModel в Post
, а затем сохранить сообщение.
Но тогда im в основном все переопределяет. Который я не хочу делать и побеждает точку вырезания ViewModel.
Кто-нибудь может смутить меня?
Это похоже на действительно распространенный сценарий, и я полностью зациклен на том, как люди это решают. Я могу видеть только 3 возможных решения:
-
Не используйте ViewModel в HTTP POST. Как я уже сказал, я делал это в прошлом для R & D, и он работает, но теперь я вижу, как изменился мой взгляд (валидация, простота), и я не могу скомпрометировать это только ради этой проблемы.
-
Не используйте TryUpdateModel. Возможно, но тогда как бы я слился в изменениях?
-
Используйте слева направо. Тьфу. Но на данный момент это похоже на то, как он склоняется.
Кто-то, пожалуйста, дайте мне решение №4!:)
Кстати, я использую ASP.NET MVC 3, Razor и Entity Framework.