UpdatePanel et validateurs (encore !)

[Résolu]
Signaler
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Bonjour,

4 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Bonjour,

il y a déjà un mot qui me fait peur : "contrôle dynamique". Je suis contre les contrôles dynamiques, cela pose que des problèmes s'ils sont mal ajoutés, dans la majorité des cas on peut s'en passer, peux être peux tu utiliser un repeater que tu bind sur un truc à la con genre un int[] histoire de repeter tes items.
Partons du principe que l'ajout dynamique ne pose pas de problème.

Le problème que tu décris me semble normal. De mémoire lorsque l'on rajoute un validateur coté client on renseigne un tableau (coté client) qui contient tous les validateurs lorsque tu fais un submit, ASP.net (coté client donc javascript) va valider tous les validateurs (du même validationgroup et sauf si causesvalidation="false"). Le problème décrit dans mon post vient du fait que lorsqu'un validateur arrive via un updatepanel, il n'est pas rajouté dans ce tableau coté client et la validation n'est donc pas effectué correctement. La solution a ce problème a été de modifier les validateurs pour se réinscrire dans le tableau de validateur après un asyncpostback.
Lorsque tu supprimes un contrôle, celui-ci ne peut logiquement plus notifier au client qu'il n'existe plus.
D'après ce que tu décris, si le validateur n'est plus présent alors la validation échoue, ce qui me semble stupide. Pour régler ce problème, il faut confirmer ce que je suppose (je n'ai rien vérifié :)) et ensuite tu pourras faire du tagmapping pour modifier les fonctions de validations coté client, cela demande un petit peu de boulot et surtout une bonne connaissance du fonctionnement de la validation coté client.
L'autre "solution" est de passer par un customvalidator et ne pas se servir des requiredfieldvalidator ainsi tu auras le comportement souhaités vu que c'est toi qui le codera :)

Pour info, lorsque tu fais un classique postback, le tableau de validateur coté client se recompose complétement et tu n'as donc plus ce genre de problème.

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

bonsoir,
merci pour ta répose détaillée.

J'ai essayé le controle repeater sur un exemple simple, C'est très intéressant, merci du tuyau, je n'y avais même pas pensé!
Cependant , il provoque toujours l'erreur de validation: le débogueur s'arrête dans WebResource.axd:

function ValidatorGetValue(id) {
var control;
control = document.getElementById(id); // ici, control=Nothing, car la textbox n'existe plus
if (typeof(control.value) == "string") //bien sûr cette instruction plante
{
return control.value;
}
return ValidatorGetValueRecursive(control);
}
je ne vois pas bien comment je pourrais y changer qqchose...c'est quoi le tagMapping?

A noter que la version "contrôles dynamiques" plante de la même façon, mais, quand on passe le débogage client, les valideurs continuent à chercher la textbox et provoquent un page.isValid=False coté serveur (tiens?). Donc double ennui !
Je crois que je vais opter pour la validation par une sub toute faite exprès.
Je vais également creuser un peu du coté du repeater, mais en fait, c'est un peu + compliqué, car j'ai 2 checkBoxlist, qui fabriquent un tableau de textbox avec des entêtes de lignes et de colonnes à géométrie variable, le tout dans un formView...Je vais essayer des UserControl emboîtés.
on se complique la vie, quelquefois!,

SuperBouly
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
tagmapping >> http://blogs.developpeur.org/cyril/archive/2006/04/12/Le-tagMapping-comment-changer-les-comportements-des-controles-web-en-quelques-lignes.aspx

Si tu n'as pas le même comportement avec un repeater versus controles dynamique cela veut "forcément" dire que tu ne rajoutes pas tes contrôles correctement, les controles dynamiques sont pénible pour la validation car généralement ils ne sont pas rajoutés là où il faut.

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

Tu as sûrement raison, c'est que mon affaire n'est pas simple...
j'ai, entre autres, une sub parcourue une fois de trop par exemple! Je crois que je vais tout reprendre.
Merci pour ton aide

SuperBouly