如何使用asp.net mvc 4避免在模型中更新某些字段

Cod*_*ior 5 c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我是asp.net mvc 4和EF的新手.我正在创建用户模型,用于创建/更新用户信息.模型代码如下:

....
public int UserID { get; set; }

[Required]
public string UserName { get; set; }

[Required]
public string Password { get; set; }

[Compare("Password")]   
public string VerifyPassword { get; set; }
.....
 SOME OTHER FIELDS COMES HERE
......
Run Code Online (Sandbox Code Playgroud)

这个模型用于创建/更新活动.这适用于创建用户但在更新时我不希望用户更新他的Id,用户名因此我保持readonly也不想显示用户密码/验证密码字段所以我从视图中删除它.现在,在更新(编辑模式)时,我总是收到密码字段的验证错误消息.所以我的问题是如何避免更新这些字段并更新其他字段.为了解决这个问题,我尝试创建viewmodel,但它对我没有帮助.还在控制器中添加了绕过验证的代码:

public ActionResult Edit(User user)
{
   ModelState.Remove("Password");
   ModelState.Remove("VerifyPassword");
   ModelState.Clear();
   if (ModelState.IsValid)
   {
     db.Entry(user).State = EntityState.Modified;
     db.SaveChanges();
     return RedirectToAction("Index");
   }
}
Run Code Online (Sandbox Code Playgroud)

这给了我ModelState.IsValid = true但无法更新.请给我解决这个问题的方法.

提前致谢..

hut*_*oid 3

  1. 您可以手动设置仅要更新的字段并保存更改。

  2. 您可以先重置从数据库中获取的值。类似下面的内容(如有错误请谅解)

    var userFromDb = db.Users.Where(u => u.UserID == user.UserID).First();
    user.Password = person.Password;
    user.VerifyPassword = person.VerifyPassword;
    
    db.Entry(person).CurrentValues.SetValues(user);
    db.SaveChanges();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建仅更新相关字段的自定义模型绑定器。