ASP.NET MVC ModelState IsValid - 如何从验证中排除特定属性?

时间:2010-10-27 19:45:47

标签: asp.net-mvc-2 data-annotations

我是MVC中的一个小组。我有一个模型:

    public class Usuarios
    {

     [Required(ErrorMessage = "**TxtOPID is required")]
        public string TxtOpID
        {
            get { return this.txt_opId; }
            set { this.txt_opId = value; }
        }

     [Required(ErrorMessage="**Password is required")]
        public string TxtPassword
        {
            get { return this.txt_password; }
            set { this.txt_password = value; }
        }

        [Required(ErrorMessage="**Email is required")]
        [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$",ErrorMessage="**Invalid email")]
        public string TxtEmail
        {
            get { return this.txt_email; }
            set { this.txt_email = value; }
        }
}

当我尝试使用ModelState.IsValid属性检查所有属性是否有效时,这是DataAnnotations并且工作正常。

问题是当我不想检查所有属性时.i.e: 如果我只想检查TxtOPID和TxtSenha属性,就像在登录表单中那样只需要OPID和密码。

如何在控制器中的特定操作中排除电子邮件属性验证?

我试过了:

  public ActionResult SignIn([Bind(Exclude="TxtEmail")]Usuarios usuario)
  {
    [...]
  }

但是它不起作用,它总是无效的原因,该特定表格不需要TxtEmail。

任何想法?

1 个答案:

答案 0 :(得分:3)

不要将所有验证都放在一个类中。为Login构建一个类,为Contact等构建另一个类

基本上每个模型都有DataAnnotations来验证该模型..即使你有30个不同的模型。您始终可以创建基类并在其中放置公共属性,并直接从中继承。

在我的情况下,我有一个登录表单,Class(使用DataAnnotations)验证“UserName”和“Password”。我还有一个“事件”表单,需要事件名称,日期,时间等。所以我有另一个类来验证事件。