mai
2010
Ce qui suit a surement déjà du être remonté, mais un rappel ne faisant pas de mal…
Récemment j’ai du développer de nouvelles fonctionnalités dans un projet ASP.NET existant. Celui-ci comportait une fiche avec de nombreuses questions à renseigner. Il y avait bien évidemment de nombreux Validators pour valider la saisie de l’utilisateur.
Il a été demandé de cacher des parties de cette fiche en fonction des réponses aux questions. Par exemple si à une question du type “Avez-vous un emprunt bancaire en cours ?” la réponse est non alors on ne doit pas voir le bloc de questions qui concerne cette emprunt (montant restant à payer, durée, etc.). Il a donc fallu désactiver côté client, les Validators qui concernaient ces blocs cachés. Il est possible de le faire grâce à la fonction ValidatorEnable en Javascript. Ce bout de code par exemple :
IEnumerable<RequiredFieldValidator> lst = from Control r in Controls where r is RequiredFieldValidator select (RequiredFieldValidator)r;
StringBuilder sb = new StringBuilder();
sb.Append("javascript: function disableRequiredFieldValidators(boolEnable) {");
foreach (RequiredFieldValidator r in lst)
sb.Append(" ValidatorEnable(document.getElementById('" + r.ClientID + "'), boolEnable); ");
sb.Append("} ");
permet d’obtenir après un appel à RegisterClientScriptBlock une fonction Javascript qui offre la possibilité de désactiver tous les RequiredFieldValidators d’une Page.
Rendre dynamique la property ValidationGroups
Une autre demande du client concernait la comparaison de plusieurs fiches sur une même Page. Logiquement, la fiche est imbriquée dans un UserControl afin de pouvoir la réutiliser. Cependant, j’ai rencontré un problème : la page n’était plus validée par les Validators lorsqu’il y avait plus d’une fiche dans celle-ci. Après investigation dans le HTML généré la raison saute aux yeux : la propriété ValidationGroup des Validators n’est pas générée dynamiquement. Ainsi, si j’utilise le UserControl de la fiche 3 fois sur la même page, le même ValidationGroup sera utilisé pour ces trois instances du UserControl. La solution : rendre dynamique la property ValidationGroup. Pour ce faire dans mon UserControl j’utilise ceci :
protected string UniqueValidationGroup { get { return ClientID + "_vgNomDuValidationGroup"; } }
<asp:RequiredFieldValidator ID="rqvComment" runat="server" Display="Dynamic" ValidationGroup='<%# UniqueValidationGroup %>'
ControlToValidate="txtComment" ErrorMessage="*" Font-Bold="true" Font-Size="Large"/>
Ainsi, plus de soucis lors de la réutilisation d’un UserControl dans une même page. Au passage, la fonction Javascript disableRequiredFieldValidators devrait aussi être nommée de façon unique, on peut pour cela concaténer le ClientID du UserControl au nom de celle-ci.
Articles récents
- [ASP.NET MVC] De l’open source à tous les étages : Microsoft accélère le virage amorcé depuis MVC 1
- [ASP.NET] Introduction MVC 4 – Part 6 : Introduction à la notion de modèle et de validation par l’exemple
- [ASP.NET] Introduction MVC 4 – Part 5 : Introduction à la notion de contrôleur et de vue par l’exemple
- [ASP.NET] Introduction MVC 4 – Part 4 : Installation de l’environnement de développement
- [ASP.NET] Introduction MVC 4 – Part 3 : MVC c’est quoi ? Quels avantages ?
Commentaires récents
- [ASP.NET MVC] Les vidéos de la MvcConf disponibles ! dans
- [ASP.NET MVC] Retrouvez Scott Guthrie, Scott Hanselman et Phil Haack à la MvcConf dans
- [Visual Studio 2010] Ajouter une commande pour obtenir le PublicKeyToken d’un assembly dans
- [PDC 2010] Premiers retours dans
- [PDC 2010] Premiers retours dans