условное либо проверка в asp.net mvc2 - PullRequest
1 голос
/ 04 апреля 2011

На моей странице регистрации у меня есть поля номера телефона и номера мобильного телефона.

Мне нужно убедиться, что пользователю нужно добавить хотя бы один номер телефона - либо стационарный, либо мобильный.1004 * Как мне это сделать?

Спасибо, Арнаб

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Вы можете написать собственный атрибут проверки и украсить им свою модель:

[AttributeUsage(AttributeTargets.Class)]
public class AtLeastOnePhoneAttribute: ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var model = value as SomeViewModel;
        if (model != null)
        {
            return !string.IsNullOrEmpty(model.Phone1) ||
                   !string.IsNullOrEmpty(model.Phone2);
        }
        return false;
    }
}

и затем:

[AtLeastOnePhone(ErrorMessage = "Please enter at least one of the two phones")]
public class SomeViewModel
{
    public string Phone1 { get; set; }
    public string Phone2 { get; set; }
}

Для более сложных сценариев проверки вы можете взглянуть на FluentValidation.NET или Надежная защита .

1 голос
/ 14 ноября 2012

Добавление решения, которое можно применить к отдельным свойствам, вместо переопределения метода проверки на уровне класса ...

Создайте следующий пользовательский атрибут. Обратите внимание на параметр «otherPropertyName» в конструкторе. Это позволит вам передать другое свойство для использования при проверке.

public class OneOrOtherRequiredAttribute: ValidationAttribute
{
    public string OtherPropertyName { get; set; }
    public OneOrOtherRequiredAttribute(string otherPropertyName)
    {
        OtherPropertyName = otherPropertyName;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var otherPropertyInfo = validationContext.ObjectType.GetProperty(OtherPropertyName);
        var otherValue = (string)otherPropertyInfo.GetValue(validationContext.ObjectInstance, null);
        if (string.IsNullOrEmpty(otherValue) && string.IsNullOrEmpty((string)value))
        {
            return new ValidationResult(this.ErrorMessage); //The error message passed into the Attribute's constructor
        }
        return null;
    }
}

Затем вы можете украсить свои свойства следующим образом: (обязательно укажите имя другого свойства для сравнения)

[OneOrOtherRequired("GroupNumber", ErrorMessage = "Either Group Number or Customer Number is required")]
public string CustomerNumber { get; set; }

[OneOrOtherRequired("CustomerNumber", ErrorMessage="Either Group Number or Customer Number is required")]
public string GroupNumber { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...