如果表单中不存在相应的字段,MVC4编辑方法会将值更改为null。

5

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

3个回答

3

不可以直接更新,如果要保留旧值,则需先获取记录,然后手动分配需要更新的值。另外一种方法是逐个遍历实体属性,并标记需要修改的属性,如下所示:

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

无论哪种方式,你最终都需要亲自进行手动操作。

2
您有两个选择:
1)如@KennyZ所提到的,在您的视图中的表单中添加@Html.HiddenFor()
2)在您的控制器中,使用ViewBagViewData将数据传递给视图。
@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();

0
当然可以。我假设它们已经在你的模型中了,只需使用Html.HiddenFor(m => m.createdBy)将它们添加到表单中。现在它们在表单中但不会显示,并且在提交方法中仍然具有值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接