繁体   English   中英

Asp.Net MVC数据注释。 如何在2个相等的属性上获得客户端验证

[英]Asp.Net MVC Data Annotations. How to get client side validation on 2 properties being equal

如何在两个属性(例如经典密码确认密码方案)上获得客户端验证。

我正在使用基于EF映射到数据库表的元数据类,以下是代码。

我的课程中注释掉的属性将使我可以进行服务器端验证,而不能进行客户端验证。

[MetadataType(typeof(MemberMD))]
public partial class Member
{

    //[CustomValidation(typeof(MemberMD), "Verify", ErrorMessage = "The password and confirmation password did not match.")]
    //[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password did not match.")]
    public class MemberMD
    {           

        [Required(ErrorMessage = "Name is required.")]
        [StringLength(50, ErrorMessage = "No more than 50 characters")]
        public object Name { get; set; }

        [Required(ErrorMessage = "Email is required.")]
        [StringLength(50, ErrorMessage = "No more than 50 characters.")]
        [RegularExpression(".+\\@.+\\..+", ErrorMessage = "Valid email required e.g. abc@xyz.com")]
        public object Email { get; set; }


        [Required(ErrorMessage = "Password is required.")]
        [StringLength(30, ErrorMessage = "No more than 30 characters.")]
        [RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")]
        public object Password { get; set; }

        [Required]
        public object ConfirmPassword { get; set; }

        [Range(0, 150), Required]
        public object Age { get; set; }


        [Required(ErrorMessage = "Postcode is required.")]
        [RegularExpression(@"^[a-zA-Z0-9 ]{1,10}$", ErrorMessage = "Postcode must be alphanumeric and no more than 10 characters in length")]
        public object Postcode { get; set; }

        [DisplayName("Security Question")]
        [Required]
        public object SecurityQuestion { get; set; }

        [DisplayName("Security Answer")]
        [Required]
        [StringLength(50, ErrorMessage = "No more than 50 characters.")]
        public object SecurityAnswer { get; set; }



        public static ValidationResult Verify(MemberMD t)
        {
            if (t.Password == t.ConfirmPassword)
                return ValidationResult.Success;
            else
                return new ValidationResult("");
        }
    }

任何帮助将不胜感激,因为我只做了这5个月,所以请不要惊blow。

您只需将其放在ConfirmPassword属性上。

    [Compare("Password", ErrorMessage = "Passwords don't match.")]
    [Required]
    public object ConfirmPassword { get; set; }

这意味着它将比较您的ConfirmPassword属性和您的Password属性。

1)ConfirmPassword对象的设置应类似于密码。 2)ConfirmPassword对象应具有另一个属性OriginalPasswordInputControl,它是“ Password”,并且3)在您的实用工具类中或您的处理验证将检查的任何地方:

//Probably in a function - something like Protected bool ValidateControl()           
if (elementToValidate.Password != OriginalPasswordInputControl.Password)
            {
                return false;
            }
            else
            {
                return true;
            }

您可以使用CompareTo属性。 正如对该问题的回答所指出的那样,它们并不是十分灵活,但是可以满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM