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