Как я могу использовать пользовательский вариантационныйattribute для обеспечения совпадения двух свойств?

StackOverflow https://stackoverflow.com/questions/2595715

Вопрос

Мы используем XVal и стандарт DataAnnotationsValidationRunner описанный здесь Чтобы собрать ошибки проверки из наших доменных объектов и просмотра моделей в ASP.NET MVC. Я хотел бы иметь способ установить этот валидационный бегун, когда два свойства не совпадают с использованием пользовательских данныхantantations.

Прямо сейчас я вынужден делать это за пределами бегуна, таким образом:

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);
Это было полезно?

Решение

видеть Написание сравнительного атрибута данныхAnnotation

А также вы можете проверить AccountModel в проекте по умолчанию MVC2, есть свойства атрибутаMustMatchattribute, применяемый к ForightPasswordModel, чтобы подтвердить, что параметр NewPassword и ConficePassword

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top