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));
    }

MVC防止更新某些字段

你的关键句子是:

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在评论中所说的那样更新你的模型:从数据库中拉出用户并只更新你想要更新的字段。