Как я могу использовать пользовательский атрибут ValidationAttribute для обеспечения совпадения двух свойств? - PullRequest
2 голосов
/ 08 апреля 2010

Мы используем 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);

1 Ответ

1 голос
/ 08 апреля 2010

см. Запись атрибута аннотирования данных сравнения

, а также вы можете проверить AccountMOdel в проекте MVC2 по умолчанию. Существует атрибут PropertiesMustMatchAttribute, примененный к ChangePasswordModel, чтобы проверить, что NewPassword и ConfirmPassword соответствуют

...