RPM*_*984 15 asp.net-mvc model-binding updatemodel viewmodel asp.net-mvc-3
我有一个[HttpPost]像这样的动作方法签名:
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
Run Code Online (Sandbox Code Playgroud)
现在,在过去(当我没有使用ViewModels,例如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);
}
Run Code Online (Sandbox Code Playgroud)
哪个很好用.
但我很困惑如何使上述内容适应ViewModel方法.
如果我这样做:
TryUpdateModel(existingPost)
Run Code Online (Sandbox Code Playgroud)
使用我的ViewModel方法,没有太多发生.没有错误,但没有任何更新,因为MVC将不知道如何更新Posta ExistingPostViewModel(在它之前Post- > Post).
现在,我正在使用AutoMapper.所以我想我可以从ViewModel映射到Post,然后保存帖子.
但后来我基本上压倒一切.我不想这样做,并且打败了ViewModel.
有人可以让我迷惑吗?
这似乎是一种非常常见的情况,我对人们如何解决这个问题感到非常难过.我只能看到3种可能的解决方案:
不要在HTTP POST中使用ViewModel.正如我说我这样做,在过去的R&d和它的作品,但现在我看到我的视图的演变(验证,简单),我不能妥协,只是这个问题的缘故.
不要使用TryUpdateModel.可能,但那么我将如何合并这些变化呢?
从左到右使用.啊.但目前这似乎是我倾向的方式.
有人请给我解决方案#4!:)
顺便说一下,我正在使用ASP.NET MVC 3,Razor和Entity Framework.
小智 2
实际上,我在当前正在进行的项目中遇到了完全相同的问题。尽管我不喜欢它,但我最终还是采用了从左到右的方法,并将视图模型数据手动映射回我的实体。
这种方法唯一的好处是它确实给了你更多的控制权。自从我开始使用更多的复合视图模型以来,您的视图模型中实际上拥有来自多个实体的字段,因此以这种方式做事开始变得更有意义。
我也在使用 AutoMapper,你说得完全正确,当你尝试执行简单的更新操作时,它确实会变得很尴尬。希望我能为您提供一些超级聪明的解决方法,但“老式方法”似乎最适合我一直在做的工作。
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |