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