1

我对在编辑表单中使用 ViewModels 感到困惑,其中一个属性是可编辑实体,即

ViewModel
   Entity
   Actions

查看页面顶部的模型声明:

   @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 中的可编辑属性对象,而不是可以直接作为模型传入的特定实体对象。

答案很可能很简单。

非常感谢提前。

编辑:

关于如何在视图中从 ViewModel 引用域对象的反馈。我发现如果我直接在 lambda 表达式中引用它们,那么模型绑定可以正常工作,因为它可以使用派生的 id 在返回的 ViewModel 周围导航。如果在 View 中使用局部变量,则该变量名称将在 Id 中使用,这会破坏 ViewModel 模型绑定映射。

4

1 回答 1

2

您的 POST 操作应将视图模型作为参数,而不是域模型:

[HttpPost]
public ActionResult Edit(ViewModel viewModel)

那么您应该使用这个 viewModel 的 ID 从需要更新的数据库中检索相应的域模型。然后从视图模型更新这个领域模型的属性。最后将域模型持久化回数据库。

于 2013-06-05T11:00:51.057 回答