如果表单中不存在correspndong字段,则MVC4编辑方法将值更改为null

时间:2013-08-13 19:49:10

标签: entity-framework asp.net-mvc-4

我的表格有两列CreatedByCreateTime。在我的视图中,我没有这些字段。现在,当我使用ASP.NET MVC4 Edit(post)方法更新记录时,这些列将设置为null。但我想保留这些价值观。我知道在我的Edit(post)方法中,我可以从数据库中检索记录并手动设置它们。但我想知道我是否可以要求实体框架不要更改这些字段的值。

3 个答案:

答案 0 :(得分:3)

不,你不能,如果你想保留旧值,那么你必须先获取记录,然后手动分配你想要更新的值。唯一的另一种方法是通过属性遍历您的实体属性并标记您要修改的属性,如下所示:

db.MyEntity.Attach(myEntity);
db.Entry(myEntity).Property(e => e.MyProperty).IsModified = true;
db.SaveChanges();

无论哪种方式,您最终都必须自己完成手动工作。

答案 1 :(得分:2)

你必须在这里做出选择:

1)正如@KennyZ所提到的那样,将@Html.HiddenFor()添加到视图中的某个位置,然后添加到表单中:

@Html.HiddenFor(m => m.CreatedBy)
@Html.HiddenFor(m => m.createTime) 

2)您可以手动更新该实体并将这两个属性保留下来:

var ent = dbctx.Entities.Find(model.ID);

ent.Prop1 = model.Prop1;
// ... also for other properties except those two property

dbctx.SaveChanges();

答案 2 :(得分:0)

当然可以。我假设它们已经在您的模型中,只需将它们添加到Html.HiddenFor(m => m.createdBy)的表单中即可。现在它们处于表单中但未显示,并且仍然具有Post方法的值。