Как интегрировать блоки приложения Validation Enterprise ValidationResults между WCF и ASP.NET? - PullRequest
2 голосов
/ 09 ноября 2009

Блок приложения для проверки корпоративных библиотек (VAB) интегрируется с ASP.NET, а также с WCF.

Есть ли способ интегрировать ValidationResults, созданные в WCF, с ASP.NET?

например. веб-страница ASP.NET вызывает службу WCF. Служба WCF проверяет данные с использованием VAB и возвращает информацию проверки через FaultContract. Страница ASP.NET может принимать результаты и отображать некоторые сообщения об ошибках. Тем не менее, общий подход заключается в том, чтобы указывать, в каких полях есть ошибки (например, встроенное сообщение или звездочка). Похоже, что большинство из этих подходов будут связаны с возможностью соотнесения результата валидации с элементом управления или с валидатором.

Я не думаю, что есть нестандартное решение, но также было бы любопытно, если бы кто-то сделал это и каков был их подход.

1 Ответ

3 голосов
/ 03 декабря 2009

Так как нет готового решения и нет опубликованных ответов, я поделюсь тем, что реализовал. Я не влюблен в этот подход, но он работает для меня.

Обзор

Основной подход состоит в том, чтобы страница ASP.NET заполняла сопоставление между свойствами объектов DataContract и ClientId проверяемого элемента управления. При возникновении ошибки проверки ClientId возвращается из службы на страницу asp.net как часть FaultContract. Затем детали из FaultException извлекаются; страница ASP.NET извлекает ClientId элемента управления, вызвавшего ошибку, и могут быть предприняты соответствующие действия (например, изменить внешний вид элемента управления или установить текст в валидаторе).

Подробнее

Все объекты DataContract наследуются от базового класса, который предоставляет словарь. Этот словарь используется для сопоставления свойств объекта элементам управления ASP.NET. В словаре ключ - это имя свойства объекта DataContract, а значение - ClientId элемента управления. Перед вызовом службы клиент должен прикрепить словарь к объекту DataContract.

Когда ValidationResult создается библиотекой предприятия, она содержит свойство Target, которое является объектом, который был проверен. ValidationResult также содержит свойство с именем key, которое является именем свойства из целевого объекта, который был проверен. Ключ ValidationResult также является ключом в словаре, который был задан на странице ASP.NET перед вызовом службы.

С помощью ключа ValidationResult предоставляемую ASP.NET информацию (ClientId) можно извлечь из цели ValidationResult. Затем информация добавляется в качестве тега результата ValidationResult. К сожалению, Tag - это свойство только для чтения, поэтому его необходимо установить, создав новый ValidationResult и передав его в конструктор.

Коллекция ValidationResults затем преобразуется в ранее существующую коллекцию CustomValidationResults (которая выглядит точно так же, как ValidationResult), которую нам нужно было использовать. Затем CustomValidationResults добавляются в пользовательский ValidationFault и генерируется исключение FaultException.

Затем ValidationFaults извлекаются из FaultException на странице ASP.NET. ValidationFault содержит ClientId элемента управления, который связан с ошибкой, поэтому на странице можно выбрать отображение сообщений по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...