在我的MVC POST例程中,有什么我可以查看(可能与ModelState相关吗?),让我知道用户是否更改了任何模型属性?换句话说,用户是否在表格中输入的值与填充视图模型并呈现表单的GET操作提供的值不同?
答案 0 :(得分:1)
在通常情况下,GET例程从"实体"中读取值。 object(通过EF连接到数据存储的POCO),将值写入视图模型,并显示一个视图,其编辑器预先填充了视图模型中的值。
用户POST回POST操作例程,该例程接收包含用户值的填充视图模型。为了检测用户是否更改了任何值,请更新实体并检查DbContext.ChangeTracker.HasChanges()
,如下所示:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditPersonalInfo(SomeViewModel model)
// Get the entity record to be updated
var user = {Get currently logged in ApplicationUser}
// Update the entity record. The model values may or may not be
// identical to the existing entity values
user.SomeProperty = model.SomeProperty;
user.AnotherProperty = model.AnotherProperty;
// Get the DbContext
var db = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
// Have any entity values been changed?
if (db.ChangeTracker.HasChanges()) {
// Save the changes
await db.SaveChangesAsync();
// Tell the user the data was changed...
<...>
}
}