UpdatePanel et EnableEventValidation [Résolu]

SuperBouly 411 Messages postés dimanche 1 février 2004Date d'inscription 8 mai 2010 Dernière intervention - 3 mai 2008 à 21:57 - Dernière réponse : metafr 4 Messages postés jeudi 27 janvier 2005Date d'inscription 12 novembre 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
SuperBouly 411 Messages postés dimanche 1 février 2004Date d'inscription 8 mai 2010 Dernière intervention - 4 mai 2008 à 21:26
3
Merci
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

Merci SuperBouly 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de SuperBouly
Meilleure réponse
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 4 mai 2008 à 21:38
3
Merci
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

Merci jesusonline 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de jesusonline
Meilleure réponse
SuperBouly 411 Messages postés dimanche 1 février 2004Date d'inscription 8 mai 2010 Dernière intervention - 5 mai 2008 à 06:56
3
Merci
   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

Merci SuperBouly 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de SuperBouly
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 5 mai 2008 à 13:55
0
Merci
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
Commenter la réponse de jesusonline
SuperBouly 411 Messages postés dimanche 1 février 2004Date d'inscription 8 mai 2010 Dernière intervention - 5 mai 2008 à 17:06
0
Merci
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
Commenter la réponse de SuperBouly
metafr 4 Messages postés jeudi 27 janvier 2005Date d'inscription 12 novembre 2013 Dernière intervention - 7 avril 2009 à 10:52
0
Merci
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...
Commenter la réponse de metafr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.