Или Требуется Валидация - PullRequest
7 голосов
/ 05 марта 2012

Я хочу использовать DataAnnotations ComponentModel, чтобы убедиться, что хотя бы одно из двух свойств имеет значение. Моя модель выглядит так:

public class FooModel {
   public string Bar1 { get; set; }
   public int Bar2 { get; set; }
}

По сути, Я хочу проверить FooModel, чтобы для Bar1 или Bar2 требовалось . Другими словами, вы можете ввести один или другой, или оба, но вы не можете просто оставить их обоих пустыми.

Я бы предпочел, чтобы это работало как для серверной, так и для ненавязчивой проверки на стороне клиента.


РЕДАКТИРОВАТЬ: Это может быть возможных дубликатов, так как это похоже на то, что я собираюсь сделать

1 Ответ

6 голосов
/ 05 марта 2012

Вам потребуется расширить класс ValidationAttribute и переопределить метод IsValid, а также реализовать IClientValidatable, если вы хотите использовать пользовательский JavaScript для проверки. что-то вроде ниже.

[AttributeUsage(AttributeTargets.Property)]
    public sealed class AtLeastOneOrTwoParamsHasValue : ValidationAttribute, IClientValidatable
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var param1 = validationContext.ObjectInstance.GetType().GetProperty("Param1").GetValue(value, null);
            //var param2 = validationContext.ObjectInstance.GetType().GetProperty("Param2").GetValue(value, null);

            //DO Compare logic here.

            if (!string.IsNullOrEmpty(Convert.ToString(param1)))
            {
                return ValidationResult.Success;
            }


            return new ValidationResult("Some Error");
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            //Do custom client side validation hook up

            yield return new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(metadata.DisplayName),
                ValidationType = "validParam"
            };
        }
    }

Использование:

[AtLeastOneOrTwoParamsHasValue(ErrorMessage="Atleast one param must be specified.")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...