Вы не можете применить одну и ту же аннотацию данных дважды к одному свойству.
Я не знаю, как выглядит ваш текущий код RequiredIfAttribute
, но я думаю, что вам придется написать еще один пользовательский валидатор, которыйпроверяет выбранную страну и соответствующим образом корректирует сообщение об ошибке.
public class PostalCodeRequiredAttribute : ValidationAttribute
{
private const string errorMessage = "{0} is required.";
public string CountryPropertyName { get; private set; }
public PostalCodeRequiredAttribute(string countryPropertyName) : base(errorMessage)
{
CountryPropertyName = countryPropertyName;
}
public override string FormatErrorMessage(string name)
{
return string.Format(errorMessage, name);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null) return ValidationResult.Success;
var countryPropertyInfo = validationContext.ObjectType.GetProperty(CountryPropertyName);
string country = countryPropertyInfo.GetValue(validationContext.ObjectInstance, null).ToString();
// assuming your country property is bound to a string
string name;
if (country == "United States")
name = "Zip code";
else if (country == "Canada")
name = "Postal code";
else
return ValidationResult.Success;
// assuming postal code not required for all other countries
return new ValidationResult(FormatErrorMessage(name));
}
}
Вы можете аннотировать таким образом, предполагая, что свойство вашей страны называется Country
:
[PostalCodeRequired("Country")]
public string PostalCode { get; set; }