我是 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
......
这个相同的模型用于创建/更新事件。这适用于创建用户,但在更新时我不希望用户更新他的 ID、用户名,所以我将其保留为只读,也不想显示用户密码/验证密码字段,所以我将其从 View 中删除。现在在更新(编辑模式)时,我总是收到密码字段的验证错误消息。所以我的问题是如何避免更新这些字段并更新其他字段。为了解决这个问题,我尝试创建 View 模型,但它对我没有帮助。还在 Controller 中添加了绕过验证的代码:
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");
}
}
这给我 ModelState.IsValid = true 但无法更新。请给我这个问题的解决方案。
提前致谢..
最佳答案
您可以手动设置仅更新的字段并保存更改。
您可以先重置从数据库中获取的值。类似下面的内容(如有错误请见谅)
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();
创建一个只更新相关字段的自定义模型 Binder 。
关于c# - 如何避免使用 asp.net mvc 4 在模型中更新某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008583/