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