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

标签 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
......

这个相同的模型用于创建/更新事件。这适用于创建用户,但在更新时我不希望用户更新他的 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 但无法更新。请给我这个问题的解决方案。

提前致谢..

最佳答案

  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();
    
  3. 创建一个只更新相关字段的自定义模型 Binder 。

关于c# - 如何避免使用 asp.net mvc 4 在模型中更新某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008583/

相关文章:

c# - 提高 SQL Server 表的查询性能包含 350 万行并且还在增长

c# - WCF 服务或 Web API

asp.net - 发布期间的自定义app_offline.htm文件

asp.net-mvc - 带有 JsonResult : ModelState is always valid 的 ASP.NET MVC 3

c# - 多次发送邮件时邮件标题错误

c# - Dotless - 无法使用 MVC Bundling 在单独的文件中引用更少的变量

javascript - 检测浏览器中的 JavaScript 弹出窗口关闭事件

asp.net - 将附加参数传递给自定义成员(member)资格提供商的 ValidateUser()

.net - 如何保护 Web API 应用程序/HTML+JS 客户端的安全?

c# - 在派生构造函数中显式调用 base() 是可选的吗?