我有一个这样的[HttpPost]
动作方法签名:
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
现在,在过去(当我不使用 ViewModel,例如 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 不知道如何Post
从 a 更新 a ExistingPostViewModel
(之前是Post
-> Post
)。
现在,我正在使用 AutoMapper。所以我想我可以从 ViewModel 映射到Post
,然后保存帖子。
但后来我基本上压倒了一切。我不想这样做并且破坏了削减 ViewModel 的要点。
谁能解惑我?
这似乎是一个非常常见的场景,我完全不知道人们如何解决这个问题。我只能看到 3 种可能的解决方案:
不要在 HTTP POST 中使用 ViewModel。正如我所说,我过去是为研发而这样做的,它确实有效,但现在我看到了我的视图是如何演变的(验证、简单),我不能仅仅为了这个问题而妥协。
不要使用 TryUpdateModel。可能,但是我将如何合并更改?
使用从左到右。啊。但目前这似乎是我倾向于的方式。
有人请给我解决方案#4!:)
顺便说一句,我正在使用 ASP.NET MVC 3、Razor 和实体框架。