asp.net проверки mvc2 - PullRequest
       13

asp.net проверки mvc2

1 голос
/ 22 сентября 2010

Я использую DataAnnotations для проверки (в том числе на стороне клиента)

У меня есть форма с несколькими полями. Базовая проверка для отдельных полей работает нормально. Теперь есть пара полей, из которых по крайней мере нужно иметь значение (если есть 3 поля, то 1-е, 2-е или 3-е поле должны иметь значение).

Я прочитал довольно много постов на этом сайте и пару записей в блоге. Но я не смог найти решение, которое работает в вышеупомянутом сценарии. Возможно, я что-то пропустил или сделал неправильно.

Можете ли вы помочь с этим, пожалуйста?

1 Ответ

2 голосов
/ 22 сентября 2010

попробуйте

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EitherOr : ValidationAttribute
{
    private const string _defaultErrorMessage = "'{0}' OR '{1}' OR '{2}' must have a value";
    private readonly object _typeId = new object();

    public EitherOr(string prop1, string prop2, string prop3)
        : base(_defaultErrorMessage)
    {
        Prop1 = prop1;
        Prop2 = prop2;
        Prop3 = prop3;

    }

    public string Prop1 { get; private set; }
    public string Prop2 { get; private set; }
    public string Prop3 { get; private set; }

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

    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, Prop1, Prop2,Prop3);
    }

    public override bool IsValid(object value)
    {
        if(string.IsNullOrEmpty(Prop1)&&string.IsNullOrEmpty(Prop2) && string.IsNullOrEmpty(Prop3))
        {
            return false;
        }
        return true;
    }

затем пометьте свой класс атрибутом EitherOr:

[EitherOr("Bar","Stool","Hood", ErrorMessage = "please supply one of the properties")]
    public class Foo
    {
        public string Bar{ get; set;}
        public string Stool{ get; set;}
        public string Hood{ get; set;}
    }

Обратите внимание, что я использовал строковые свойства, если ваше свойство другого типа, обязательно измените IsValid(object value) проверку

...