加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 数据注释MVC3必需属性

发布时间:2020-12-16 06:26:23 所属栏目:asp.Net 来源:网络整理
导读:我有下面的模型(用户),我用它来添加新用户和更新现有用户. 当我添加新用户时,需要输入用户名和密码,当我更新时,只需要输入用户名,因为不允许更改密码.这是问题,添加一个新用户一切正常,因为我输入了名称和密码值,因此ModelState.IsValid返回true,但更新用户
我有下面的模型(用户),我用它来添加新用户和更新现有用户.
当我添加新用户时,需要输入用户名和密码,当我更新时,只需要输入用户名,因为不允许更改密码.这是问题,添加一个新用户一切正常,因为我输入了名称和密码值,因此ModelState.IsValid返回true,但更新用户时没有输入密码,所以它始终具有null值是什么使得ModelState.IsValid始终返回false.
有没有办法使用相同的模型,即使在添加视图中需要密码,在更新视图中它不是?
拜托,有什么建议吗?

public class User {

        public int ID { get; set; }

        [Display(Name = "Nome do Usuário")]
        [Required(ErrorMessage = "Digite o Nome do Usuário.")]
        public string name { get; set; }

        [Display(Name = "Senha")]
        [Required(ErrorMessage = "Digite a Senha.")]
        public string password { get; set; }

    }



public ActionResult Add()
        {
            return View();
        }

      [HttpPost]
            public ActionResult Add(User user)
            {
                UsuariosViewModel viewModel = new UsuariosViewModel();


                if (ModelState.IsValid)
                {
                    viewModel.Msg = new AdmUsuarios().CadastraUsuario(user);
                }
                return View(viewModel);
            }



    public ActionResult Update(int id)
            {
                UsuariosViewModel viewModel = new UsuariosViewModel();

            using (var dataContext = new DBEntities()) 
            {
                Repository<User> repository = new Repository<User>(dataContext);
                viewModel.User = repository.GetById(id);
            }

                return View(viewModel);
            }

        [HttpPost]
        public ActionResult Update(User user,int id)
        {          
            UsuariosViewModel viewModel = new UsuariosViewModel();

            if (ModelState.IsValid)
            {
                viewModel.Msg = new AdmUsuarios().AlteraUsuario(user,id);
            }
            return View();
        }

解决方法

您应该使用视图模型.

然后,您的数据注释将属于传递给视图的视图模型

public class CreateViewModel
{
  public int ID { get; set; }

  [Display(Name = "Nome do Usuário")]
  [Required(ErrorMessage = "Digite o Nome do Usuário.")]
  public string name { get; set; }

  [Display(Name = "Senha")]
  [Required(ErrorMessage = "Digite a Senha.")]
  public string password { get; set; }
}

并编辑

public class EditViewModel
    {
      public int ID { get; set; }

      [Display(Name = "Nome do Usuário")]
      [Required(ErrorMessage = "Digite o Nome do Usuário.")]
      public string name { get; set; }

      //perhaps you don't need the password at all in the edit view
    }

将这些类传递给您的视图,而不是您的域模型(用户),然后在控制器中将视图模型属性映射回模型,然后再保留到数据源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读