这个问题与Visual Studio 2013 Asp.net MVC-5.2.2项目有关:
我的类中有一个 NotMapped 字符串属性:
[NotMapped]
public string myNotMappedAttribute{ get; set; }
我使用此属性(未映射在控制器的原始表中)来填充与正在考虑的控制器表具有外键关系的不同表中的列。同样,这个想法在创建中完美有效,但不能编辑。
我有一个MVC EditorFor框,可以在Create.cshtml(剃刀)中工作,如下所示:
<div class="editor-label">
@Html.LabelFor(model => model.myNotMappedAttribute)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.myNotMappedAttribute)
@Html.ValidationMessageFor(model => model.myNotMappedAttribute)
</div>
但是,完全相同的 razor 代码在 Edit.cshtml 文件中使用时返回 null。
在控制器的 Edit 回发方法中,此属性(且仅此属性)为 null,其他属性具有正确的值。 我什至移动了此属性,因此它不会是最后一个属性,而是在它正确之后的一个属性。
关于为什么这会在创建而不是编辑中工作的任何想法?
事实证明,我使用的新默认项目在控制器的回发 Edit 方法中具有一些绑定属性:
public ActionResult Edit([Bind(Include = "myAttribute_1,myAttribute_2,myAttribute_3")] MyModel myModel)
可以省略这一点,它将起作用:
[HttpPost]
public ActionResult Edit(MyModel myModel)
据推测,将此属性添加到绑定列表也可以工作,尽管我自己没有亲自检查。
注意:我真的不知道这个问题的答案,但思考这个谜团,我最终看到了这些属性。 我什至不认为该方法值得放在原始问题中,因为我相当确定 Razor 代码是一个问题。 另外,我最初使用了一个不起作用的下拉列表,为了简单起见,我决定用文本框替换它;事实证明这是一个明智的决定,因为可以想象调试文本框中的红鲱鱼数量!