Мы используем xVal и стандарт DataAnnotationsValidationRunner
, описанный здесь , чтобы собирать ошибки валидации из наших доменных объектов и просматривать модели в ASP.NET MVC. Мне бы хотелось, чтобы этот бегун проверки определял, когда два свойства не совпадают, с помощью пользовательских DataAnnotations.
Прямо сейчас я вынужден сделать это вне бегуна, вот так:
if (!(model.FieldOne == model.FieldTwo))
errors.Add(new ErrorInfo("FieldTwo", "FieldOne must match FieldTwo", model.FieldTwo));
У меня вопрос: можно ли это сделать с помощью атрибутов проверки уровня свойств, или я вынужден использовать атрибуты уровня класса (в этом случае мне придется изменить бегуна ... и мой следующий вопрос будет как лучше всего их найти в этом случае).
Спасибо!
ОБНОВЛЕНИЕ: Я наконец-то понял, как написать объектный запрос для реализации предложения в выбранном ответе; Я сопоставляю результаты этого запроса с результатами стандартного средства проверки, если кому-то было интересно. Обратите внимание, что я изменил TypeId в качестве свойства поля подтверждения.
var classErrorQuery =
from attribute in
instance.GetType().GetCustomAttributes(typeof (ValidationAttribute), false).Cast
<ValidationAttribute>()
where !attribute.IsValid(instance)
select new ErrorInfo(attribute.TypeId.ToString(), attribute.FormatErrorMessage(string.Empty), instance);