UpdatePanel et EnableEventValidation

Résolu
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010 - 3 mai 2008 à 21:57
metafr Messages postés 4 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 12 novembre 2013 - 7 avril 2009 à 10:52
bonjour,
Une fois de plus le problème de EnableEventValidation.
Ma page contient, entre autres, un gridView avec une colonne "Sélectionner" et un formview affichant le détail de l'enregistrement sélectionné. et on peut y éditer modifier supprimer cet enregistrement. Une RadioButtonList permet un filtrage des enregistrements: jusqu'ici ça va.

J'ai entrepris d'insérer le tout dans un UpdatePanel. Là, les FileUpload n'ont pas fonctionné, normal, j'ai donc déclaré les événements de mon formview en "PostBack" et non en "AsyncPostBack". et Hop après 2 où 3 clicks, par exemple sur la RadioButtonList l'erreur :

Argument de publication ou de rappel non valide. La validation d'événement est activée via dans la configuration ou via <%@ Page EnableEventValidation="true" %> dans une page. Pour des raisons de sécurité, cette fonctionnalité vérifie si les arguments des événements de publication ou de rappel proviennent du contrôle serveur qui les a rendus à l'origine. Si les données sont valides et attendues, utilisez la méthode ClientScriptManager.RegisterForEventValidation afin d'inscrire les données de publication ou de rappel pour la validation.

alors j'ai écrit

ProtectedOverloadsOverridesSub render (ByVal writer As System.Web.UI.HtmlTextWriter)
      ClientScript.RegisterForEventValidation(rblDefi.UniqueID, "True")

'-------- ne marche pas non plus ------------------------------------------
      ClientScript.GetPostBackEventReference(rblDefi, "SelectedChanged", True)
'-----------------------------------------------------------------------------------
   MyBase.Render(writer)
End
Sub

Mais rien ne s'arrange, j'ai lu beaucoup de littérature su la question, j'ai bien lu l'excellent blog http://blogs.developpeur.org/cyril/archive/2007/01/09/validation-d-evenement-en-asp-net-2-0-eventvalidation.aspx, également le post qui semble résolu :
http://www.aspfr.com/infomsg_PROBLEME-VALIDATION-EVENEMENT_904959.aspx, mais j'avoue ne pas bien saisir la solution.
Y a-t-il une solution,sûrement !
Je précise qu'évidemment , si je mets sur ma page : EnableEventValidation="false" 
 tout s'arrange, mais...
merci de vos lumières

SuperBouly

6 réponses

SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
4 mai 2008 à 21:26
ok, j'ai trouvé, j'avais oublié de mentionner un trigger (la radioButtonList du 2e UpdatePanel justement) dans le premier UpdatePanel. Au moins, cet exemple peut servir à savoir que ce que ce genre d'oubli peut provoquer et à orienter les recherches..
merci
SuperBouly
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
4 mai 2008 à 21:38
Bonjour,

Tu peux essayer de nous fournir un exemple le plus simpliste possible nous permettant de reproduire le problème. Car là c'est pas évident de t'aider.
Sinon, voici quelques pistes pour debugger, regarde ce que vaut Request.Form["__EVENTTARGET"] ensuite met un point d'arret dans le page_load (avant que l'erreur se produise) charge les symbols du framework (afin de récuperer les sources du framework), dans le menu debug > Exceptions, coche ce qu'il faut pour que VS s'arrete sur l'exception et normalement à partir de là tu vas réussir à tomber sur la source de l'exception (dans les sources du framework) et tu vas pouvoir analyser le call stack, afin de comprendre le problème.

Le debug, c'est tout un art :)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
3
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
5 mai 2008 à 06:56
   Merci de ces pistes de recherche, je sais que la situation est très embrouillée, mais puisque le pb est résolu, je peux tout de même donner une idée de ce qui a provoqué l'erreur en simplifiant au maximum, je crois que ça peut intéresser.

J'ai 2 UpdatePanels (UP1 et UP2).
Dans le premier,UP1, un controle utilisateur CU muni d'une propriété "EstVisible", et dont le contenu est dépendant de controles situé dans UP2.
Dans le second, Un gridView GV avec une colonne de linkButtons "sélectionner" qui affichent dans un FormView FV, le détail d'un enregistrement en vue de modification/suppression. Mais aussi une RadioButtonList rbl de tri des enregistrements de GV.
là, 2 choses se sont entrechoquées :
 - Des fileUpload dans FV: J'ai du mettre FV en dans les 2 UP et ChildrenAsTriggers= "False" et le détail des triggers partout.
- et la sub sur la sélection de la RadioButtonList :

Protected
Sub rbl_SelectedIndexChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles rbl .SelectedIndexChanged

'----------------du code -------------------
CU.EstVisible = False   '<-----Cette instruction faisait planter

'----------------du code -------------------

Oui, cette instruction faisait planter  car Dans UP1, j'avais oublié de déclarer la radio buttonList en Trigger.(!)

<Triggers>
<asp:AsyncPostBackTrigger
ControlID= " GV "
EventName ="SelectedIndexChanged"
/>
<asp:PostBackTrigger
ControlID= " FV "
/>
' OUBLI :
<asp:AsyncPostBackTrigger
ControlID ="rbl
"
EventName="SelectedIndexChanged"
/>
< -------- autres triggers ------------

</Triggers>Je sais que c'est très difficile à suivre, mais EN UN MOT, l'erreur vient de la non déclaration d'un trigger dans UP1 alors que un évènement dans UP2 demande une modification de son contenu. D'ou la suspicion .... Fallait trouver !
merci en tout cas de ta méthode pour un débogage fouillé, je la note.

SuperBouly
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
5 mai 2008 à 13:55
Ca m'a l'air un poil compliqué, je n'ai pas tout suivi (et j'ai pas pris le temps pour ;)) mais je ne pense pas que l'erreur viennent que "un évènement dans UP2 demande une modification de son contenu." c'est plutot que de mettre estVisible à false entraine des modification de structure au niveau de l'arbre de controle lors du render (déplacé/suppression de noeud). Tu peux surement modifié une propriété "à la con" sans que cela pose ce genre de problème :p

Bref, t'as quand meme réussis à resoudre le problème sans mettre enableEventValidation à false contrairement à ce que tous le monde fait :)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
5 mai 2008 à 17:06
oui, c'était compliqué, j'ai donc simplifié, la propriété n'est pas vraiment "EstVisible",  mais elle concerne la visibilité seulement d'une partie de l'UserControl, une liste de noms... je ne sais pas si ça change qqchose à ton diagnostic, en tout cas c'est vrai que la tentation est forte de mettre enableEventValidation à false et basta !.
SuperBouly
0
metafr Messages postés 4 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 12 novembre 2013
7 avril 2009 à 10:52
Au plus j'utilise ASP.NET, au plus j'aime PHP.
Je ne comprends vraiment pas le succés de ce framework qui est une vrai usine à gaz.
Dès que l'on s'éloigne de l'utilisation 'normal' que M$ a prévu, cela devient cauchemardesque.

Beaucoup trop de temps perdu à chercher pourquoi "ça marche pas" et je ne parle pas du viewstate...
0
Rejoignez-nous