Asp.Net MVC 3: сравнивать валидатор по подвойствам - PullRequest
1 голос
/ 01 марта 2012

Для редакции моего пользователя я должен убедиться, что пароль и повторный пароль совпадают.Я нашел валидатор «Сравнить», но не могу заставить его работать.

моя модель выглядит следующим образом:

public class UserEditionViewModel{
   [Compare("User.Password")]
   public String RepeatPassword{get;set;}

   public User User {get;set;}
   public List<Language> AvailableLanguages{get;set;}
   public List<Country> AvailableCountries{get;set;}
}

и модель пользователя:

public class User{
   [Required]
   public String Name{get;set;}

   //lot of other properties omitted...

   [RegularExpression(@"(|.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*)", ErrorMessageResourceType = typeof(LocalizationResources.Views.User.Edition), ErrorMessageResourceName = "InvalidPassword")]
   //And I've localization attributes
   public String Password{get;set;}
}

В представлении у меня есть только что-то вроде:

@Html.PasswordFor(m=>m.User.Password)
@Html.PasswordFor(m=>m.RepeatPassword)

Но я всегда получаю эту ошибку, даже если два элемента совпадают:

'Password repeat' and 'User.Password' do not match.

Я также получил эту ошибку, когдаЯ делаю проверку клиента.

Для меня наиболее очевидной ошибкой является то, что он не может найти подвойство.Я прав?Если да, то как избежать этого поведения.Если нет, в чем может быть проблема ???

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Обходным путем будет создание другого свойства в UserEditionViewModel, которое читает и записывает во внутренний класс User.

public String UserPassword 
{
    get
    {
        return User.Password;
    }
    set
    {
        User.Password = value;
    }
}

А затем вместо этого привяжите элементы управления к этому свойству и измените значение [Compare("User.Password")] на [Compare("UserPassword")].Я не совсем уверен, можно ли это сделать каким-либо иным способом, кроме написания собственного пользовательского валидатора.

У меня была похожая проблема, и в итоге я написал свой собственный валидатор для этого, который оказался удивительно сложным, поскольку вы можетеиметь любой уровень наследования, чтобы добраться до вашей собственности.Если есть другое решение, я был бы рад узнать об этом.

0 голосов
/ 17 мая 2014

Вы можете попробовать это, который работал для меня ..

  1. В вашем проекте -> Ссылки -> щелкните правой кнопкой мыши -> Управление пакетами NuGet ..

  2. установить пакет DataAnnotationsExtensions.

  3. Затем подтвердите вашу модель следующим образом:

    сотрудник публичного класса { [Обязательно (ErrorMessage = "Имя поля обязательно")]

    public string name { get; set; }
    [Required(ErrorMessage = "Name field Required")]
    public string email { get; set; }
    [Required(ErrorMessage = "Depatrment field Required")]
    public string department { get; set; }
    [Required(ErrorMessage = "Designation field Required")]
    public string designation { get; set; }
    public string  phone { get; set; }
    [Required(ErrorMessage = "Password field Required")]
    [Display(Name="Password")]
    public string password { get; set; }
    [Required(ErrorMessage="Confirm password")]
    [Display(Name="Re-type Password")]
    [EqualToAttribute("password",ErrorMessage="Password miss-match")]
    public string Re_Password { get; set; }
    

    }

Вот и все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...