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