xVal, примечания к данным для всего класса
-
20-09-2019 - |
Вопрос
У меня есть полная проверка объекта, и я пытаюсь найти наилучший способ справиться с этим.
Учитывая следующий класс:
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}
Я хочу использовать dataannotation и xval для проверки класса перед его сохранением, но у меня сложная проверка, для которой требуется более одного свойства.
Псевдо:
if SendBlankCart {
- no validation on ToName, ToAddress
} else {
ToName - required.
ToAddress - required.
}
Я хотел бы прокомментировать это следующим образом:
[LetterResponseValidator]
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}
и иметь правило проверки, подобное этому:
public class LetterResponseValidator : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value.GetType() == typeof(LetterResponse))
{
var letterResponse = (letterResponse) value;
if (letterResponse.SendBlankCard)
{
return true;
} else
{
if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
{
return false;
}
return true;
}
}
return false;
}
}
Я ожидаю, что параметр будет моим экземпляром класса LetterResponse, но он никогда не вызывается в моем окне проверки?
Кто-нибудь знает, как с этим справиться?
Спасибо,
Хэл
Решение
Я не думаю, что это связано с тем фактом, что у вас есть валидатор на уровне класса.Чтобы исключить любое соединение, попробуйте применить фиктивный обязательный валидатор к "ToName" и посмотреть, вызван валидатор или нет.
Если он вызывается, то дайте мне знать, если это не так, то вам следует проверить, переопределили ли вы свой стандартный modelbinder DataAnnotationsModelBinder в вашем файле Global.asax.cs:
ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();
Для получения более подробной информации об этом полностью работающем демо-проекте прочтите это статья в блоге о проверке на стороне клиента.