我对在编辑表单中使用ViewModels感到困惑,其中一个属性是可编辑实体,即
ViewModel
Entity
Actions
View页面顶部的模型声明:
@model MyProject.Models.ViewModel
不
@model MyProject.Models.Entity
那么表示实体属性的最佳方式是什么,这是需要更新的实体属性。我首先开始制作一个变量。
Entity myEntity = ViewModel.Entity;
因此,每个表单元素编辑字段可以表示为:
@Html.EditorFor(model => myEntity.Name)
但是,后期操作中的模型绑定参数会发生什么?
[HttpPost]
public ActionResult Edit(Entity myEntity)
db.Entities.Attach(myEntity);
db.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
db.SaveChanges();
所以这个问题实际上是关于如何处理ViewModel中的可编辑属性对象,而不是特定的实体对象,可以作为直接模型传入。
回答很可能很简单。
提前非常感谢。
编辑:
有关如何从View中的ViewModel引用域对象的反馈。我发现如果我直接在lambda expresions中引用它们,那么模型绑定工作正常,因为它可以使用派生的id来导航返回的ViewModel。如果在View中使用局部变量,则在Id中使用此变量名称,然后断开ViewModel模型绑定映射。
答案 0 :(得分:2)
您的POST操作应将视图模型作为参数,而不是域模型:
[HttpPost]
public ActionResult Edit(ViewModel viewModel)
然后您应该使用此viewModel的ID从需要更新的数据库中检索相应的域模型。然后从视图模型更新此域模型的属性。最后将域模型保留回数据库。