Asp.Net MVC Аннотации данных. Как получить проверку на стороне клиента на 2 свойства равных - PullRequest
2 голосов
/ 28 мая 2010

Как получить подтверждение на стороне клиента для двух свойств, таких как сценарий с классическим паролем для подтверждения пароля.

Я использую класс метаданных, основанный на отображении 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 месяцев, пожалуйста, постарайтесь не поразить меня.

Ответы [ 3 ]

1 голос
/ 07 марта 2013

Вы просто должны указать это для атрибута ConfirmPassword.

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

Это означает, что он будет сравнивать ваш атрибут ConfirmPassword с вашим атрибутом Password.

0 голосов
/ 28 мая 2010

Вы можете использовать атрибут CompareTo . Как указывалось в ответах на этот вопрос, они не очень гибки, но могут удовлетворить ваши потребности.

0 голосов
/ 28 мая 2010

1) Объект ConfirmPassword должен быть настроен аналогично паролю. 2) объект ConfirmPassword должен иметь другое свойство OriginalPasswordInputControl, которое является «паролем», и 3) в вашем служебном классе или там, где ваша проверка обработки будет проверять:

//Probably in a function - something like Protected bool ValidateControl()           
if (elementToValidate.Password != OriginalPasswordInputControl.Password)
            {
                return false;
            }
            else
            {
                return true;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...