Либо или требуется проверка

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

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

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

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


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

7 голосов | спросил Ben Lesh 5 MaramMon, 05 Mar 2012 04:25:09 +04002012-03-05T04:25:09+04:0004 2012, 04:25:09

1 ответ


0

Вам потребуется расширить класс 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.")]
ответил Ricky G 5 MaramMon, 05 Mar 2012 04:47:41 +04002012-03-05T04:47:41+04:0004 2012, 04:47:41

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132