Я понимаю, что это старо, но в интересах помочь другим, кто столкнулся с этой проблемой и наткнулся на этот вопрос, как я, вы можете захотеть использовать атрибут CustomValidation
для таких свойств вместо того, чтобы полагаться на Required
атрибут.
CustomValidation
позволит вам более детально адаптировать ваши сообщения проверки к недвижимости, которую вы проверяете. Я использовал context.DisplayName
, чтобы динамически отображать имя проверяемого свойства просто для краткости, но это может быть дополнительно настроено в зависимости от ваших потребностей.
Если требуется дополнительная настройка, вы можете написать разные обработчики CustomValidation
для каждого отдельного свойства, вместо того, чтобы просто использовать один и тот же, как я делал в моем примере кода.
using System.ComponentModel.DataAnnotations;
public class Book {
[CustomValidation(typeof(Book), "ValidateContact")]
public Contact PrimaryContact { get; set; }
[CustomValidation(typeof(Book), "ValidateContact")]
public Contact SecondaryContact { get; set; }
[Required(ErrorMessage = "Book name is required")]
public string Name { get; set; }
public static ValidationResult ValidateContact(Contact contact, ValidationContext context) {
ValidationResult result = null;
if (contact == null) {
result = new ValidationResult(string.Format("{0} is required.", context.DisplayName));
} else if (string.IsNullOrWhiteSpace(contact.Name)) {
result = new ValidationResult(string.Format("{0} name is required.", context.DisplayName));
}
return result;
}
}
public class Contact {
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
}