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但无法更新.请给我解决这个问题的方法.
提前致谢..
您可以手动设置仅要更新的字段并保存更改。
您可以先重置从数据库中获取的值。类似下面的内容(如有错误请谅解)
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)创建仅更新相关字段的自定义模型绑定器。
| 归档时间: |
|
| 查看次数: |
11489 次 |
| 最近记录: |