MVC防止更新某些字段
本文关键字:字段 更新 MVC | 更新日期: 2023-09-27 18:13:57
我有一个ASP。使用存储库模式和实体框架的。NET MVC 4应用程序
当我访问User/Details/5页面并更新用户详细信息时,我得到以下错误-
属性'Password'不能设置为空值。
在我看来,除了Password,我有所有这些字段,因为我在这个视图中不需要它。我如何(本质上)告诉MVC不更新密码在这个视图?
这是我的UserModel
public class UserModel : IUserModel
{
public int Id{ get; set; }
[DisplayName("Employee Number")]
public int EmployeeNumber { get; set; }
[DisplayName("First Name")]
public string Firstname { get; set; }
[DisplayName("Last Name")]
public string Surname { get; set; }
public string Email { get; set; }
[DisplayName("User Type")]
public UserType UserType { get; set; }
[DisplayName("Login")]
public UserStatus UserStatus { get; set; }
[DisplayName("Login Status")]
public bool LoginStatus { get; set; }
public string Password { get; set; }
[ReadOnly(true)]
public DateTime DateCreated { get; set; }
[ReadOnly(true)]
public int CreatedBy { get; set; }
[ReadOnly(true)]
public DateTime LastUpdated { get; set; }
[ReadOnly(true)]
public int LastUpdateBy { get; set; }
[DisplayName("Full Name")]
public string SurnameFirstName
{
get { return Surname + ", " + Firstname; }
}
[NotMapped]
public State State { get; set; }
}
这是我的控制器-
[HttpPost]
public ActionResult Details(UserModel model)
{
if (ModelState.IsValid)
{
_userService.Update(model);
return RedirectToAction("Index");
}
return View(model);
}
和我的_userService。更新方法
public void Update(UserModel entity)
{
User u = _userRepository.FindById(entity.Id);
AutoMapper.Mapper.CreateMap<UserModel, User>();
_userRepository.Update(AutoMapper.Mapper.Map(entity, u));
}
你的关键句子是:
In my view, I have all these fields apart from Password, as I have no need for it in this view.
你应该定义ViewModels而不是玩模型(我知道有很多例子像你一样,但最好的做法是使用ViewModels)。
ViewModel基本上是一个为视图建模的类,所以它只包含你需要的属性。在你得到这个之后,你可以像@krillgar在评论中所说的那样更新你的模型:从数据库中拉出用户并只更新你想要更新的字段。