Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    Consultant freelance, n'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Validator et UpdatePanel - Bug des contrôles de validation avec Microsoft ASP.net Ajax

Si vous décidez d'utiliser des contrôles de validation dans un UpdatePanel il se peut que vous rencontriez des problèmes. En effet si vous rafraichissez un UpdatePanel qui contient un validator, le message d'erreur lié au validateur ne sera jamais affiché.

Prenons un exemple concret :

<asp:ScriptManager ID="sc1" runat="server" /> <asp:UpdatePanel ID="up1" runat="server"> <ContentTemplate> <%=DateTime.Now.ToLongTimeString() %> <asp:TextBox ID="tb1" runat="server" /> <asp:RequiredFieldValidator ID="rq1" runat="server" ControlToValidate="tb1" ErrorMessage="*" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btn1" /> <asp:AsyncPostBackTrigger ControlID="btn2" /> </Triggers> </asp:UpdatePanel> <asp:Button ID="btn1" runat="server" Text="Refresh UpdatePanel" CausesValidation="false" /> <asp:Button ID="btn2" runat="server" Text="Validate the textbox" />

Lorsque je click sur le premier bouton, mon UpdatePanel se rafraichit correctement, si je clique ensuite sur le second bouton et que la textbox est vide, rien ne ce passe ; la validation s'effectue correctement mais il n'y a aucun message d'erreur. La raison est que les contrôles de validation ont besoin d'un script client, or dans un UpdatePanel en cours de rafraichissement il faut utiliser la méthode ScriptManager.RegisterStartupScript & co pour pouvoir ajouter un script plutôt que ClientScript.RegisterStartupScript.

Dans les versions bétas et même RC de Microsoft Ajax Extensions, on avait des nouveaux validator, il suffisait d'utiliser le tagmapping, et tous les contrôles de validation fonctionnait correctement. Malheureusement dans la version finale, ces contrôles ont disparues ! D'après Matt Gibbs, il devrait bientôt avoir un patch pour ASP.net livré via Windows Update qui corrigera ce problème. En attendant vous pouvez utiliser les contrôles mis à disposition sur son blog : ASP.net Ajax Validators. Après avoir rajouté la dll dans le bin de votre application il vous faudra rajouter les quelques lignes suivantes dans votre web.config :

<tagMapping> <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Sample.Web.UI.Compatibility.CompareValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Sample.Web.UI.Compatibility.CustomValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.RangeValidator" mappedTagType="Sample.Web.UI.Compatibility.RangeValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.RegularExpressionValidator" mappedTagType="Sample.Web.UI.Compatibility.RegularExpressionValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="Sample.Web.UI.Compatibility.RequiredFieldValidator, Validators, Version=1.0.0.0"/> <add tagType="System.Web.UI.WebControls.ValidationSummary" mappedTagType="Sample.Web.UI.Compatibility.ValidationSummary, Validators, Version=1.0.0.0"/> </tagMapping>

A partir de là, les contrôles de validation fonctionneront correctement dans un UpdatePanel.

Posted: dimanche 18 février 2007 01:06 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

SuperBouly a dit :

Bonjour,

Très bonne information (comme toujours). J'ai eu un autre avatar avec la validation et un UpdatePanel (j'essaie de simplifier au maximum):

J'ai une chechboxList (autoPostBack=True) qui commande le contenu d'un updatePanel : des textBox correspondant aux cases cochées.

Si on coche 3 cases, par ex., Il apparaît 3 textbox et leurs valideurs, créés dynamiquement.

Un Bouton enregistre les données.

Si je décoche une case créée précédemment, la textbox correspondante disparaît correctement,  le valideur est également supprimé par le code. Mais je ne peux enregistrer, car la validation échoue.

Le valideur (RequireFieldValidator) ne semble pas supprimé, et empêche l'enregistrement: le serveur me demande de remplir la textbox qui a été supprimée...

J'ai longtemps cherché l'erreur de mon code, mais il ne semble pas y en avoir:

Si je déclare la checkBoxList en asyncPostBackTrigger, ça ne marche pas.

En revanche, si je la déclare en postbackTrigger (ou pas du tout), ça marche très bien, j'ai un postback classique, et le code est parcouru de la même façon au débogage...

Je m'en suis tiré en supprimant la création dynamique des valideurs et en effectuant une vérification des données juste avant l'enregistrement des données.

As-tu entendu parler de ce genre d'ennui, qui ne semble pas le même que celui que tu décris.

Tout se passe comme si le serveur gardait en mémoire la liste des validations à effectuer , sans l'actualiser. Y a-t-il un moyen de l'actualiser

Cordialement

SuperBouly

# août 3, 2008 14:10

cyril a dit :

# août 4, 2008 11:14
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Silverlight 3 : Communication et multicast par Kévin Gosse le il y a 5 heures et 52 minutes

- [Perso] Découvertes estivales : Linux (Part I) par Le blog de FremyCompany le il y a 8 heures et 34 minutes

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 23 heures et 10 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le 07-03-2009, 23:36

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15