2009-11-09 1 views
2

Le bloc d'application de validation de bibliothèque d'entreprise (VAB) s'intègre à ASP.NET et également à WCF.Comment intégrer l'application de validation de bibliothèque d'entreprise Bloque ValidationResults entre WCF et ASP.NET?

Existe-t-il un moyen d'intégrer ValidationResults créé dans WCF avec ASP.NET?

par exemple. une page Web ASP.NET appelle un service WCF. Le service WCF valide les données à l'aide de VAB et renvoie des informations de validation via un FaultContract. La page ASP.NET peut prendre les résultats et afficher certains messages d'erreur. Cependant, une approche courante consiste à indiquer quels champs ont des erreurs (par exemple un message en ligne ou un astérisque). Il semble que la plupart de ces approches impliquent de pouvoir corréler le résultat de la validation avec un contrôle ou avec un validateur.

Je ne pense pas qu'il existe une solution prête à l'emploi, mais aussi curieux si quelqu'un avait fait cela et quelle était leur approche.

Répondre

3

Puisqu'il n'y a pas de solution prête à l'emploi et qu'il n'y a pas de réponse, je vais partager ce que j'ai implémenté. Je ne suis pas amoureux de l'approche mais ça marche pour moi.

Vue d'ensemble

L'approche de base est la page ASP.NET pour remplir une correspondance entre les propriétés des objets DataContract à la ClientId du contrôle qui est en cours de validation. Lorsqu'une erreur de validation se produit, ClientId est renvoyé du service à la page asp.net dans le cadre d'un FaultContract. Ensuite, les détails de l'exception FaultException sont extraits. la page ASP.NET récupère l'ID client du contrôle qui a provoqué l'erreur et une action appropriée peut être effectuée (par exemple, modifier l'apparence du contrôle et définir le texte sur un validateur).

Détails

Tous les objets DataContract héritent d'une classe de base qui expose un dictionnaire. Ce dictionnaire est utilisé pour mapper les propriétés d'objet aux contrôles ASP.NET. Dans le dictionnaire, la clé est le nom de la propriété sur l'objet DataContract et la valeur est l'ID client du contrôle. Avant d'appeler un service, le client doit attacher le dictionnaire à l'objet DataContract.

Lorsqu'un ValidationResult est créé par Enterprise Library, il contient une propriété appelée Target, qui est l'objet qui a été validé. ValidationResult contient également une propriété appelée key, qui est le nom de la propriété de l'objet cible qui a été validé. La clé ValidationResult est également une clé dans le dictionnaire qui a été définie dans la page ASP.NET avant d'appeler le service.

Avec la clé ValidationResult, les informations fournies ASP.NET (ClientId) peuvent être extraites de la cible ValidationResult. L'information est ensuite ajoutée en tant que Tag du ValidationResult. Malheureusement, Tag est une propriété en lecture seule, elle doit donc être définie en créant un nouveau ValidationResult et en transmettant la balise au constructeur.

La collection de ValidationResults est ensuite transformée en une collection CustomValidationResults préexistante (qui ressemble à ValidationResult) que nous devions utiliser. Les CustomValidationResults sont ensuite ajoutés à un objet ValidationFault personnalisé et une exception FaultException est générée.

Les valeurs ValidationFaults sont ensuite extraites de FaultException dans la page ASP.NET. ValidationFault contient le ClientId du contrôle associé à l'erreur afin que la page puisse choisir d'afficher les Messages comme bon lui semble.

Questions connexes