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

标签 asp.net-mvc-3 model data-annotations modelstate

我有下面的模型(用户),我用它来添加新用户并更新现有用户。 当我添加新用户时,需要输入用户名和密码,当我更新时,只需要输入用户名,因为不允许更改密码。问题是,添加新用户一切正常,因为我输入了名称和密码值,因此 ModelState.IsValid 返回 true,但是在更新用户时没有输入密码,因此它始终具有空值,这使得ModelState.IsValid 始终返回 false。 有没有办法使用相同的模型,即使在“添加 View ”中需要密码而在“更新 View ”中不需要密码? 请问,有什么建议吗?

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

最佳答案

您应该使用 View 模型。

您的数据注释将属于传递给 View 的 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
    }

将这些类传递给您的 View ,而不是域模型(User),然后在 Controller 中将 View 模型属性映射回模型,然后再保留到数据源。

关于asp.net-mvc-3 - 数据注释 MVC3 必需属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142947/

相关文章:

checkbox - Vue.js:如果语句为真,则设置复选框已选中

model - 卡恩过程网络和参与者模型之间的区别

c# - 带有变量的 DisplayAttribute 名称,Dynamic DisplayName

c# - 无法加载类型 'System.ComponentModel.DataAnnotations.Schema.IndexAttribute'

.net - 如何替换标准 DataAnnotations 错误消息

asp.net-mvc - Nuget - 能够指定要从添加的包中排除哪些包依赖项

c# - 使用 "cross-domain"来登录另一个域

asp.net-mvc - 在 Controller 方法中重新验证修改后的 ViewModel?

python - 动态更新ModelForm的Meta类模型字段

asp.net-mvc - 如何强制链接使用特定路由(MVC路由)