【问题标题】:ASP.NET MVC 4 Cross field or property validationASP.NET MVC 4 跨字段或属性验证
【发布时间】:2014-04-24 11:15:55
【问题描述】:

我试图弄清楚如何验证用户在注册时是否输入了匹配的密码。 MVC 4 Data Annotations 中是否有内置的东西可以用于此目的,或者是创建自定义验证属性的唯一途径?

如果我必须创建自定义验证属性,我如何访问密码属性(假设我将注释放在确认密码属性上)?另外,是否有用于此类验证的常用库?

这是我在自定义验证属性的开头所拥有的,只是不确定如何访问密码属性:

public class CrossFieldValidationAttribute : ValidationAttribute
{
    public override bool IsValid(object value) //how do I get the other value in here?
    {
        //validation logic here
        return base.IsValid(value);
    }
}

感谢您的帮助!

【问题讨论】:

  • 在创建登录帐户时将密码与数据库匹配或匹配密码? (因此注册)?

标签: c# asp.net asp.net-mvc


【解决方案1】:

mvc 中已经内置了一个比较验证属性。请参阅此处的文档:

http://msdn.microsoft.com/en-us/library/system.web.mvc.compareattribute(v=vs.98).aspx

一个使用例子是:

    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "Uh oh")]
    public string PasswordAgain { get; set; }

【讨论】:

    【解决方案2】:

    您可以创建自定义属性并为其公共属性设置其他信息。

    public class CustomValidationAttribute : ValidationAttribute
    {
        public string MeaningfulValidationInfo { get; set; }
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // do whatever meaningful with MeaningfulValidationInfo 
            return base.IsValid(value, validationContext);
        }
    }
    

    您可以这样设置附加信息:

    [CustomValidationAttribute(MeaningfulValidationInfo = "blah")]
    public ActionResult Index()
    {
        return View();
    }
    

    如果您尝试检查两个输入的密码是否相同,您只需在模型中验证即可。

        public class LoginModel
        {
            [Required]
            [EmailAddress]
            public string EmailAddress { get; set; }
            [Required]
            public string Password { get; set; }
            [Required]
            [Compare("Password")]
            [Display(Name = "Confirm password")]
            public string ConfirmPassword { get; set; }
        }
    }
    

    【讨论】:

      【解决方案3】:

      比较注释是最简单的选项。如下所示,Compare 指向Password 属性。

      [Required]
      [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
      [DataType(DataType.Password)]
      [Display(Name = "Password")]
      public string Password { get; set; }
      
      [DataType(DataType.Password)]
      [Display(Name = "Confirm password")]
      [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
      public string ConfirmPassword { get; set; }
      

      【讨论】:

        【解决方案4】:

        您可以使用 ASP.NET 工具中内置的 *Compare Validate * 控件

        我在下面提供了一个示例

        <body>
            <form id="form1" runat="server">
            <div>
        
            <asp:Label
                id="lblBirthDate"
                Text="Birth Date:"
                AssociatedControlID="txtBirthDate"
                Runat="server" />
            <asp:TextBox
                id="txtBirthDate"
                Runat="server" />
            <asp:CompareValidator
                id="cmpBirthDate"
                Text="(Invalid Date)"
                ControlToValidate="txtBirthDate"
                Type="Date"
                Operator="DataTypeCheck"
                Runat="server" />
        
            <br /><br />
        
            <asp:Button
                id="btnSubmit"
                Text="Submit"
                Runat="server" />
        
            </div>
            </form>
        </body>
        

        请参考以下任何链接以扩展您的知识

        http://www.java2s.com/Tutorial/ASP.NET/0160__Validation/CompareValidatorperformsthreedifferenttypesofvalidations.htm

        http://www.vkinfotek.com/aspnetvalidationcontrols.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-01
          • 1970-01-01
          相关资源
          最近更新 更多