Вы можете сделать вашу модель наследуемой от IValidatableObject , а затем поместить свою пользовательскую логику в метод Validate.Вам также необходимо удалить атрибут RequredAttribute из свойства.Вам придется написать некоторый пользовательский javascript для проверки этого правила на клиенте, поскольку метод Validate не переводится в ненавязчивую структуру проверки.Примечание. Я изменил ваши свойства на строки, чтобы избежать приведения.
Кроме того, если у вас есть другие ошибки проверки из атрибутов, они сначала сработают и не позволят запустить метод Validate, поэтому вы обнаружите эти ошибки только в том случае, если атрибут -на основе проверки в порядке.
public class Party : IValidatableObject
{
[DisplayName("Your surname")]
public string surname { get; set; }
[DisplayName("Type")]
public string party_type { get; set; }
...
public IEnumerable<ValidationResult> Validate( ValidationContext context )
{
if (party_type == "P" && string.IsNullOrWhitespace(surname))
{
yield return new ValidationResult("Surname is required unless the party is for an organization" );
}
}
}
На клиенте вы можете сделать что-то вроде:
<script type="text/javascript">
$(function() {
var validator = $('form').validate();
validator.rules('add', {
'surname': {
required: {
depends: function(element) {
return $('[name=party_type]').val() == 'P';
}
},
messages: {
required: 'Surname is required unless the party is for an organization.'
}
}
});
});
</script>