Как проверить два свойства с ASP.NET MVC 2

Я просто начинаю с ASP.NET MVC 2 и играю вокруг с Проверкой.

Скажем, у меня есть 2 свойства:

  • Password1
  • Password2

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

У меня есть простой класс под названием "NewUser".

Как я реализовал бы это? Я читал о ValidationAttribute и понимаю это. Но я не вижу, как я использовал бы это для реализации проверки, которая сравнивает два или больше свойства с eathother.

Заранее спасибо!

Проблема с ниже решения:

Когда это применяется к приложению, и ModelBinder выполняет проверку Модели, затем существует проблема:

Если уровень Свойства, ValidationAttribute содержит ошибку, то уровень Класса ValidationAttribute НЕ проверен. Я не нашел решение этой проблемы на данный момент.

Если у Вас есть решение этой проблемы, обменяйтесь своим опытом. Большое спасибо!

6
задан CodeMonkey 23 June 2010 в 06:22
поделиться

1 ответ

Стандартный шаблон ASP.NET MVC 2 Visual Studio включает точный атрибут проверки, который вам нужен. Вставлено из файла AccountModels.cs :

[AttributeUsage(AttributeTargets.Class, 
    AllowMultiple = true, Inherited = true)]
public sealed class PropertiesMustMatchAttribute : ValidationAttribute {
    private const string _defaultErrorMessage = 
        "'{0}' and '{1}' do not match.";
    private readonly object _typeId = new object();

    public PropertiesMustMatchAttribute(string originalProperty, 
        string confirmProperty)
        : base(_defaultErrorMessage) {
        OriginalProperty = originalProperty;
        ConfirmProperty = confirmProperty;
    }

    public string ConfirmProperty { get; private set; }
    public string OriginalProperty { get; private set; }

    public override object TypeId {
        get {
            return _typeId;
        }
    }

    public override string FormatErrorMessage(string name) {
        return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
            OriginalProperty, ConfirmProperty);
    }

    public override bool IsValid(object value) {
        PropertyDescriptorCollection properties = 
           TypeDescriptor.GetProperties(value);
        object originalValue = properties.Find(OriginalProperty, 
            true /* ignoreCase */).GetValue(value);
        object confirmValue = properties.Find(ConfirmProperty, 
            true /* ignoreCase */).GetValue(value);
        return Object.Equals(originalValue, confirmValue);
    }
}

Как использовать:

[PropertiesMustMatch("Password", "ConfirmPassword", 
    ErrorMessage = "The password and confirmation password do not match.")]
class NewUser {
    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Password")]
    public string Password { get; set; }
    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Confirm password")]
    public string ConfirmPassword { get; set; }
}
7
ответ дан 17 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: