Asp.net mvc 如何在ActionResult中使用绑定生成的实例

Asp.net mvc 如何在ActionResult中使用绑定生成的实例,asp.net-mvc,asp.net-mvc-4,model-view-controller,Asp.net Mvc,Asp.net Mvc 4,Model View Controller,这是一个涉及MVC中编辑生命周期的一般概念问题 据我所知,editget操作从db上下文中提取请求的实例,并通过将该实例传递到Edit视图(其中该实例被称为视图模型)来结束 “编辑”视图使用以下内容: @Html.HiddenFor(model => model.SomethingIDoNOTWantEdited) <div class="form-group"> @Html.LabelFor(model => model.SomethingIDoWantEdit

这是一个涉及MVC中编辑生命周期的一般概念问题

据我所知,editget操作从db上下文中提取请求的实例,并通过将该实例传递到Edit视图(其中该实例被称为视图模型)来结束

“编辑”视图使用以下内容:

@Html.HiddenFor(model => model.SomethingIDoNOTWantEdited)
<div class="form-group">
    @Html.LabelFor(model => model.SomethingIDoWantEdited, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.SomethingIDoWantEdited, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.SomethingIDoWantEdited, "", new { @class = "text-danger" })
    </div>
</div>
创建一个名为viewModel的MyClass类型的亮闪闪的新对象

现在,我知道我可以在上下文上进行查询,获取数据库中具有该Id的当前对象,然后将所有字段从viewModel复制到现有字段,然后将原始字段标记为modified,然后调用SaveChanges()。当只有几个属性需要复制时,这并不太糟糕,但是当有很多属性需要复制时,就会变得很麻烦


是否有更好的方法将用户更改的项目写回数据库?

您不理解。如果您从db上下文获取一个实例并将其传递给视图,那么该实例就是您的数据模型。视图模型是一个单独的类,用于表示要显示/编辑的内容,通常包含
selectlist
和视图使用的其他属性。至于数据模型和视图模型之间的映射属性,可以使用以下工具:。注:任何时候使用
[Bind(Include..)]
都要重新考虑一下你在做什么。好吧,可能是坏条款。。。MyClass已经包含这些SelectList和[NotMapped]属性,因此MyClass作为ViewModel有双重职责。至于使用[Bind(Include…),当我让EF生成我的视图时,它就是这样做的,所以我使用了它。你能详细介绍一下从视图中的实例和编辑帖子处理程序中的db中获取大量数据的常用方法吗?就我个人而言,我认为尝试将数据模型作为ViewModel来使用是一种不好的做法(这就是我给出上面链接的原因)。我们讨论了一些选项,但如果您的模型包含15个需要编辑的元素,并且只需要2个SelectList,我认为将SelectList添加到模型比将元素添加到单独的ViewModel更有意义。我正在考虑创建一个包含SelectList的ViewModel类,然后该类继承所有可编辑元素。您所指页面上的“EF的自动附加方法”解决方案正是我想要的。作为一个答案张贴,我会接受它。
[HttpPost]
public ActionResult Edit([Bind(Include = "Id, SomethingIDoWantEdited, SomethingIDoNOTWantEdited")] MyClass viewModel)