我有一个使用存储库模式和实体框架6的ASP.NET MVC 4应用程序。
当我访问User / Details / 5页面并更新用户详细信息时,我收到以下错误 -
该物业'密码'不能设置为空值。
在我看来,除了密码之外,我有所有这些字段,因为我在这个视图中不需要它。我怎样(基本上)告诉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.Update方法
public void Update(UserModel entity)
{
User u = _userRepository.FindById(entity.Id);
AutoMapper.Mapper.CreateMap<UserModel, User>();
_userRepository.Update(AutoMapper.Mapper.Map(entity, u));
}
答案 0 :(得分:4)
你的关键句是:
In my view, I have all these fields apart from Password, as I have no need for it in this view.
您应该定义 ViewModels 而不是使用模型(我知道有很多例子与您一样,但最佳做法是使用视图模型)。
ViewModel基本上是一个为视图建模的类,因此它只包含您需要的属性。获得此项后,您可以更新模型,因为@krillgar在评论中说:从数据库中提取用户并仅更新您要更新的字段。