tengo un método [HttpPost]
acción de la firma así:¿Cómo actualizar el modelo cuando se vincula a un ViewModel?
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
Ahora, en el pasado (cuando no usamos ViewModels, por ejemplo, R & D), tuve una implementación de un método de Editar como esto:
[HttpPost]
public ActionResult Edit(Post model)
{
var existingPost = repo.Find(model.Id);
TryUpdateModel(existingPost);
repo.Save(existingPost);
return RedirectToAction("Success", existingPost.Id);
}
Lo que funcionó muy bien.
Pero estoy confundido sobre cómo adaptar lo anterior al enfoque de ViewModel.
si hago esto:
TryUpdateModel(existingPost)
Con mi enfoque de modelo de vista, no sucede gran cosa. No hay errores, pero no se actualiza nada porque MVC no sabrá cómo actualizar un Post
desde un ExistingPostViewModel
(antes era Post
->Post
).
Ahora, estoy usando AutoMapper. Así que pensé que podía mapear desde el ViewModel al Post
, luego guardar la publicación.
Pero básicamente estoy básicamente anulando todo. Lo cual no quiero hacer y derrota el punto del modelo definido ViewModel.
¿Alguien puede confundirme?
Esto parece un escenario muy común, y estoy totalmente perplejo en cuanto a cómo las personas resuelven esto. Solo puedo ver 3 soluciones posibles:
No use un ViewModel en HTTP POST. Como dije, hice esto en el pasado para R & D y funciona, pero ahora veo cómo han evolucionado mis View (validación, simplicidad), y no puedo comprometerlo solo por el bien de este problema.
No utilice TryUpdateModel. Posiblemente, pero ¿cómo me fusionaría en los cambios?
Use de izquierda a derecha. Ugh. Pero por el momento, esta parece ser la manera de imponerse.
Alguien por favor dame la solución # 4! :)
Por cierto, estoy usando ASP.NET MVC 3, Razor y Entity Framework.
Noooo ... :) No me importa hacer de izquierda a derecha de vez en cuando, pero esto significa que CUALQUIER página de actualización tendrá que hacerlo. Realmente debería haber una forma genérica/simple de hacer esto. Yo uso ViewModel en cada Vista. Entonces cada Vista que requiere una actualización de la base de datos necesita L-R. Además, ahora también necesito una tonelada de campos ocultos. Me duele la cabeza ... :( – RPM1984
Estaba esperando con la esperanza de que alguien más viniera y nos dijera que hay una mejor manera. Pero supongo que no .((1) y aceptado. – RPM1984