Question

J'utilise une ancienne version d'ASP.NET AJAX en raison de limitations d'exécution. Placer un validateur ASP.NET à l'intérieur d'un panneau de mise à jour ne fonctionne pas.Existe-t-il une astuce pour que cela fonctionne, ou dois-je utiliser le contrôle ValidatorCallOut fourni avec la boîte à outils AJAX ?

Était-ce utile?

La solution

Je soupçonne que vous exécutez la version originale (RTM) de .NET 2.0.

Jusqu'au début de 2007, les contrôles du validateur n'étaient pas compatibles avec UpdatePanels.Ce problème a été résolu avec le SP1 du .NET Framework.

La source du problème est que UpdatePanel peut détecter les modifications de balisage dans votre page, mais il n'a aucun moyen de suivre correctement les scripts.Les validateurs s'appuient fortement sur des scripts.Lors d'une publication partielle, les scripts sont soit détruits, soit non mis à jour, soit ne sont pas exécutés lorsqu'ils sont censés le faire.

Dans les premières versions bêta, MS demandait à UpdatePanel d'essayer de deviner quels scripts devaient être restitués ou exécutés.Cela n'a pas très bien fonctionné et ils ont dû le retirer.

Pour contourner le problème immédiat, Microsoft a publié une version corrigée des classes de validation dans une nouvelle DLL appelée Validators.DLL et a donné des instructions sur la manière d'indiquer à ASP.NET d'utiliser ces classes au lieu des classes réelles.Si vous recherchez ce nom de DLL sur Google, vous devriez trouver plus d'informations.Voir également Ce billet de blog.

C'était une mesure provisoire et vous devriez ne pas l'utiliser évitez-le si possible.

La véritable solution au problème est arrivée peu de temps après, dans .NET 2.0 SP1.Microsoft a introduit un nouveau mécanisme pour enregistrer les scripts dans SP1 et a modifié les véritables classes de validateur pour utiliser ce mécanisme au lieu de l'ancien.

Laissez-moi vous donner quelques détails sur les changements :

Traditionnellement, vous étiez censé enregistrer les scripts via des méthodes Page telles que Page.RegisterStartupScript() et Page.RegisterClientScriptBlock().Le problème est que ces méthodes n'étaient pas conçues pour l'extensibilité et UpdatePanel n'avait aucun moyen de surveiller ces appels.

Dans SP1, il existe un nouvel objet de propriété sur la page appelé Page.ClientScripts.Cet objet dispose de méthodes pour enregistrer des scripts équivalents (et, à certains égards, meilleurs) aux scripts originaux.En outre, UpdatePanel peut surveiller ces appels, afin de restituer ou d'appeler les méthodes le cas échéant.L'ancien RegisterStartupScript(), etc.les méthodes sont obsolètes.Ils fonctionnent toujours, mais pas dans un UpdatePanel.

Il n'y a aucune raison (autre que politique, je suppose) de ne pas mettre à jour vos installations vers .NET 2.0 SP1.Les Service Packs contiennent des correctifs importants.

Bonne chance.

Autres conseils

@Jonathan Hollande :Quel est le problème avec l’utilisation de Validators.dll ?

Puisqu'ils remplacent les classes d'origine, vous contournez tranquillement les bugs et les correctifs de sécurité, les améliorations, etc.que Microsoft pourrait publier dans le futur (ou aurait déjà publié).À moins que vous ne regardiez attentivement le fichier web.config, vous ne remarquerez peut-être jamais que vous sautez des correctifs.

Bien entendu, il faut évaluer chaque situation.Si vous êtes absolument bloqué avec .NET 2.0 RTM, alors Validators.dll vaut mieux que rien.

@jmein

En fait, le problème est que les scripts du client Validator ne fonctionnent pas lorsqu'ils sont placés à l'intérieur d'un updatePanel (actualisation des UpdatePanels à l'aide de .innerHTML, qui ajoute les nœuds de script en tant que nœuds de texte, et non en tant que nœuds de script, de sorte que le navigateur ne les exécute pas).

Le correctif était un correctif publié par Microsoft qui résout ce problème.Je l'ai trouvé avec l'aide de Google.

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

Si, pour une raison quelconque, vous ne parvenez pas à utiliser la version mise à jour des contrôles du validateur ASP.NET, il est en fait très simple de valider vous-même un groupe de validation, tout ce que vous avez à faire est d'appeler

Page_ClientValidate("validationGroupName");

Ensuite, vous pouvez utiliser PageRequestManager pour exécuter la validation selon vos besoins.

Utiliser les contrôles de validation mis à jour est certainement la voie à suivre, mais je suis assez partisan de JavaScript ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top