数据注解MVC3必需属性(Data annotations MVC3 Required attrib

2019-07-20 17:44发布

我有模型(用户)下面,我用它来添加新用户,更新现有用户。 当我添加一个新用户它需要输入用户名和密码,当我更新它是必需的,因为它是不允许更改密码只输入用户名。 这是问题所在,因为增加进入我既名和密码值,以便ModelState.IsValid返回true,但在更新的用户在没有输入密码的新用户一切工作正常,所以它总是空值是什么让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();
        }

Answer 1:

您应该使用视图模型。

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

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
    }

通过这些类到视图(一个或多个),而不是域模型( User ),那么,在所述控制器,持续到数据源之前映射视图模型属性回到模型。



Answer 2:

我通常指定我BaseViewModel元素要隐藏,然后使用jQuery来隐藏它们。 它可以与你的布局混乱不过,如果你使用更多的“花哨”的布局比我平时从上到下基于列的布局。 隐藏form-group的每个元素被隐藏,并在它下面的元件只是移位向上。

我的工作的主线是LOB应用程序内联网,所以我跳过所有花哨的大部分时间。



文章来源: Data annotations MVC3 Required attribute