Вы можете реализовать IValidatableObject
в своем классе и предоставить метод Validate()
, который реализует вашу собственную логику.Объедините это с пользовательской логикой проверки на клиенте, если вы предпочитаете, чтобы она была предоставлена.Я считаю, что это проще, чем реализовать атрибут.
public class ContactModel : IValidatableObject
{
...
public IEnumerable<ValidationResult> Validate( ValidationContext context )
{
if (string.IsNullOrWhitespace( ContactPhoneNumber )
&& string.IsNullOrWhitespace( ContactEmailAddress ))
{
yield return new ValidationResult( "Contact Phone Number or Email Address must be supplied.", new [] { "ContactPhoneNumber", "ContactEmailAddress" } );
}
}
}
Чтобы все работало на стороне клиента, вам нужно добавить следующий скрипт в ваше представление:
<script type="text/javascript">
$(function() {
$('form').validate();
$('form').rules('add', {
"ContactPhoneNumber": {
depends: function(el) { return !$('#ContactEmailAddress').val(); }
}
});
});
</script>