如何判断用户是否更改了视图模型中的属性

时间:2015-03-22 02:52:16

标签: asp.net-mvc

在我的MVC POST例程中,有什么我可以查看(可能与ModelState相关吗?),让我知道用户是否更改了任何模型属性?换句话说,用户是否在表格中输入的值与填充视图模型并呈现表单的GET操作提供的值不同?

1 个答案:

答案 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...
        <...>
    }
}