Вы можете либо создать свой собственный атрибут проверки, либо использовать проверку MVC Foolproof, а затем выполнить:
class MyClass
{
public int Selector {get;set;} // 1 or 2
[RequiredIf("Selector == 1", ErrorMessage = "Your Error Message")]
public string A_required_for_1 {get;set;}
[RequiredIf("Selector == 1", ErrorMessage = "Your Error Message")]
public string B_required_for_1 {get;set;}
[RequiredIf("Selector == 2", ErrorMessage = "Your Error Message")]
public string C_required_for_2 {get;set;}
[RequiredIf("Selector == 2", ErrorMessage = "Your Error Message")]
public string D_required_for_2 {get;set;}
[Required("Your Error Message")]
public string E_Required_for_both_selectors {get;set;}
}
Как упоминалось Win, похоже, что он некоторое время не находился в активной разработке, поэтому вы можете пойти по пути создания своего собственного настраиваемого атрибута проверки, который требует дополнительной работы, но вы можете более точно контролировать саму проверку. . Выбирайте в зависимости от ваших потребностей.
Для пользовательского атрибута проверки вы можете сделать что-то вроде этого:
public class RequiredIfOtherProperty : ValidationAttribute
{
private readonly string _otherPropertyName;
private readonly string _compareValue;
public RequiredIfOtherProperty(string otherPropertyName, string compareValue)
{
_otherPropertyName = otherPropertyName;
_compareValue = compareValue;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var otherProperty = validationContext.ObjectType.GetProperty(_otherPropertyName);
if (otherProperty == null)
{
return new ValidationResult($"Property '{_otherPropertyName}' does not exist");
);
var otherPropertyValue = otherProperty.GetValue(validationContext.ObjectInstance, null);
if (!_compareValue.Equals(otherPropertyValue))
{
return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
}
return null;
}
}
Это должно дать вам приблизительное представление о том, что вы можете сделать, и вы можете изменить фактическую проверку на то, что вам нравится. Затем вы можете использовать его как обычный атрибут, например.
[RequiredIfOtherProperty("SomeProperty", "ValueToCompareWith")]
person
Kevin Lee
schedule
29.07.2016