Asp.net 2 => Invalid postback or callback argument. [Résolu]

Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 6 mai 2006 à 20:08 - Dernière réponse : djay99 22 Messages postés mardi 17 juillet 2007Date d'inscription 12 mars 2008 Dernière intervention
- 7 août 2007 à 17:59
Bonjour,

J'ai un datagrid dans un Usercontrol (ascx) qui est chargé dans une page aspx. Ce datagrid a des imagesboutons ou autres qui permettent le tri ou la sélectionné d'une colonne/ligne.

Le control a été créé pour fonctionner sous le framework .net 1.1 à la base, et cela fonctionne très bien depuis plusieurs mois.

J'ai commencé à migrer il y a quelques jours mon application sous le framework .net 2, afin de profiter de ses nombreux nouveau avantage. Tout fonctionne correctement, sauf mon Usercontrol contenant mon datagrid.

Le bind des données est parfait. Par contre lorsque je clic sur n'importe quel des imagesbutons, j'optien l'erreur suivante :

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Si je passe le paramètre enableEventValidation
de la @page à true, je n'obtient plus l'erreur, mais je n'ai aucun retour de mon code. Si je debug mon application, les callback ne s'effectue pas. (les events ne sont pas déclanché, par exemple ItemCommand).

Si quelqu'un avait une solution, cela m'aiderait énormément.

D'avance, merci,

Focalizer
Afficher la suite 

16 réponses

Répondre au sujet
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 7 mai 2006 à 12:32
+3
Utile
Bonjour

essaye en mettant ton code du page_load dans le page_preinit, ou essaye aussi de mettre ce code dans un block if not page.ispostback //toncode// end if

par contre pourquoi tu bind tes données dans le rowdatabound ? tu peux directement le faire dans ton template en faisant <%# Bind("tonchamp") %>


<HR>
Cyril - MVS - MCP
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jesusonline
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 7 mai 2006 à 18:12
+3
Utile
J'ai trouvé !

J'ai supprimer le paramètre DataKeyNames="Filename" de mon controle Gridview :



Ensuite, dans le code, je l'ai mit mais via la condition sur le post back :

If
Not Page.IsPostBack
Then
Dim DataKeyNames
As
String() =
Nothing
Array.Resize(DataKeyNames, 1)
DataKeyNames(0) =
"Filename"
Me.Cmp_GvFilelist.Dg.DataKeyNames = DataKeyNames

End
If

Et la tout fonctionne, mes postback marche, mon gridview est bien remplit, tout est ok :)

Merci pour l'info du PreInit cyril !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Focalizer
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 6 mai 2006 à 21:32
0
Utile
bonsoir,

ce lien explique le problème : http://www.issociate.de/board/goto/1089320/ClientScriptManager.RegisterForEventValidation.html

Si tu mets ton UserControl dans une page vide ca fait la meme chose ? lors de ton itemCommand tu fais quoi exactement ?


<HR>
Cyril - MVS - MCP
Commenter la réponse de jesusonline
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 6 mai 2006 à 21:54
0
Utile
Salut, merci de cette réponse rapide.

J'avais déja eu une réponse du style sur google, j'ai bien essaye de faire un ClientScript.RegisterForEventValidation sur le datagrid, ou encore sur les Imagesbuttons du datagrid.

Cela n'a rien changé.

Je viens d'essayer en mettant mon usercontrol dans une page vide, j'optient la même erreur.

Le code de mon itemcommand est tout simple, je fais juste une vérification du nom de la commande, ensuite j'appel une fonction.

Mais lorsque je met un point d'arrêt sur l'event, il n'est même pas appelé.
Commenter la réponse de Focalizer
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 6 mai 2006 à 22:53
0
Utile
oui d'aprés l'erreur c'est normal que le point d'arret ne soit jamais atteint puisque l'erreur provient avant tout ca, lors de la vérification de la page, pour savoir si elle a été modifié ou non.

Je viens de repenser à un truc : tu utilises un datagrid or avec asp.net 2 le datagrid a été rendu obsoléte, tu devrais surement essayer d'utiliser un gridview. En tout cas c'est quand meme bizare que cela ne fonctionne pas, tout me parait bon.


<HR>
Cyril - MVS - MCP
Commenter la réponse de jesusonline
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 6 mai 2006 à 22:59
0
Utile
Ok, je n'avais pas vu que le datagrid était obsolète, je vais essayer avec un gridview, je repasserais dire quoi
Commenter la réponse de Focalizer
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 7 mai 2006 à 00:49
0
Utile
Même chose avec un GridView :/

Je sais plus trop où chercher
Commenter la réponse de Focalizer
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 7 mai 2006 à 01:56
0
Utile
Bizarre.

Je viens d'essayer avec un gridview est tout est bon, on peut voir des extraits de code ?


<HR>
Cyril - MVS - MCP
Commenter la réponse de jesusonline
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 7 mai 2006 à 11:02
0
Utile
Biensur:


Page test.Aspx :









Untitled Page












Protected
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.Load


Dim Sql_Fonctions
As
New Sql_Fonctions

Dim Dv
As DataView = Sql_Fonctions.Execute_Sql_Ds(
"SELECT F.FileName, F.FileDate, F.FileDescription, SUBSTRING(F.FileName, CHARINDEX('-', F.FileName) + 1, LEN(F.FileName) - CHARINDEX('-', F.FileName)) As filenamea From TblFiles F Inner Join TblUsers U On U.UserId=F.FileUser Where U.UserId=1").Tables(0).DefaultView

Me.Cmp_GvFilelist.Dv = Dv

Me.Cmp_GvFilelist.BindPageFichiers()

Dv =
Nothing

End
Sub

Cmp_GvFilelist.ascx :






















































































Dim _Dv
As DataView



' Propriété qui permet de passer le DataView contenant les données à afficher
Public
Property Dv()
As DataView

Get
Return
Me._Dv

End
Get
Set(
ByVal Value
As DataView)

Me._Dv = Value

End
Set
End
Property


Public
Sub BindPageFichiers(
Optional
ByVal SortExp
As
String =
"")

If
Not
Me._Dv
Is
Nothing
Then
If
Me._Dv.Count > 0
Then
Me.GridView.DataSource =
Me._Dv

Me.GridView.DataBind()

Me.GridView.Visible =
True
Else
Me.GridView.Visible =
False
End
If
End
If
End
Sub


Public
Event InfoClicked(
ByVal e
As System.Web.UI.WebControls.GridViewCommandEventArgs)



Private
Sub GridView_RowCommand(
ByVal sender
As
Object,
ByVal e
As System.Web.UI.WebControls.GridViewCommandEventArgs)
Handles GridView.RowCommand

Select
Case e.CommandName.ToLower

Case
"info"
RaiseEvent InfoClicked(e)

End
Select
End
Sub


Private
Sub GridView_RowDataBound(
ByVal sender
As
Object,
ByVal e
As System.Web.UI.WebControls.GridViewRowEventArgs)
Handles GridView.RowDataBound



If e.Row.RowType = DataControlRowType.DataRow
Then



Dim FileName
As
String = e.Row.DataItem(
"FileName")

Dim FileUrl
As
String


FileName = Right(FileName, FileName.Length - FileName.IndexOf(
"-") - 1)
FileUrl = FileName



Dim FileExtention
As
String = Right(FileName, FileName.Length - FileName.LastIndexOf(
".") - 1)

Dim Img_Type
As Image =
CType(e.Row.FindControl(
"Img_Type"), Image)
Img_Type.ImageUrl =
"/Images/" & FileExtention &
".png"





Dim EHl
As HyperLink
EHl =
CType(e.Row.FindControl(
"Lbl_Col_Fic_Value"), HyperLink)
EHl.Text = FileName
EHl.NavigateUrl = FileUrl
EHl.ToolTip = e.Row.DataItem(
"FileDescription")

Dim ETmp
As Label

ETmp =
CType(e.Row.FindControl(
"Lbl_Col_Date_Value"), Label)
ETmp.Text = e.Row.DataItem(
"FileDate")


ETmp =
CType(e.Row.FindControl(
"Lbl_Col_Type_Value"), Label)
ETmp.Text = e.Row.DataItem(
"Type")


ETmp =
CType(e.Row.FindControl(
"Lbl_Col_Taille_Value"), Label)
ETmp.Text = (
New Divers_Utils).GetSizeInString(Convert.ToInt64(e.Row.DataItem(
"Taille")))

End If

End Sub
Commenter la réponse de Focalizer
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 7 mai 2006 à 13:16
0
Utile
J'ai mit le code dans le page_preinit, et mes events sont bien appellé !

Problème en partie règlé, car maitenant il me renvoit l'erreur suivante :

Item has already been added. Key in dictionary: 'Filename' Key being added: 'Filename'

Je ne vois pas trop à quoi elle correspond. Si je met le code dans le preinit dans le 'if not page.ispostback', je n'ia plus l'erreur, mais après le postback (et mon event bien appellé), mon gridview est vide.
Commenter la réponse de Focalizer
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 7 mai 2006 à 23:29
0
Utile
Haeum . .

En faite, ca marchait niquel dans ma page de test vide test.aspx.
Une fois implémenté dans mon application, cela ne marche plus.

Dans mon text.aspx, j'utilisais du code en dur, pas de session ou autre.

Car apparament, dans le PreInit, l'acces au session est imposible. Enfin, il n'y a d'objet session. Tout comme on ne sait accèder à aucun controle de la page.

Une idée ?
Commenter la réponse de Focalizer
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 7 mai 2006 à 23:47
0
Utile
Je comprend vraiment pas pourquoi ca ne marche pas :-(

Essaye alors de mettre tout ca dans le page_init, mais je t'avoue que je n'y pige plus rien.


<HR>
Cyril - MVS - MCP
Commenter la réponse de jesusonline
Focalizer 76 Messages postés dimanche 19 mai 2002Date d'inscription 8 mai 2006 Dernière intervention - 8 mai 2006 à 00:58
0
Utile
J'avais essayé dans le InitComplete et ca passait pas.

La je viens de mettre le code que j'avais dans le PreInit dans le Init et ca semble marcher, avec postback & co, le tout implémenté dans mon appli !
Commenter la réponse de Focalizer
GrosJoce 2 Messages postés jeudi 7 octobre 2004Date d'inscription 14 juin 2006 Dernière intervention - 14 juin 2006 à 09:44
0
Utile
Bonjour,

J'ai un soucis qui semble semblable au tien, j'aimerais savoir quel est le code que tu as mis dans le preinit.

J'ai créé un TemplateField contenant un imageButton. Ce bouton possède un attribut "commandname". Je teste cet attribut dans une fonction ayant pour paramètres object

sender,
GridViewCommandEventArgs e

Il me renvoit une page d'erreur identique à la tienne.

Comment dois-je organiser mon code pour ne plus avoir cette erreur ?

Merci.
Commenter la réponse de GrosJoce
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 26 juil. 2007 à 11:31
0
Utile
Salut

J'ai eu le même problème, et le problème était qu'il y avait deux balises form dans la page, ca peut permet aider les prochains.

C'est pour celui qui passe par là qui aurait ce type de problème.
Commenter la réponse de nhervagault
djay99 22 Messages postés mardi 17 juillet 2007Date d'inscription 12 mars 2008 Dernière intervention - 7 août 2007 à 17:59
0
Utile
bonjour tout le monde,

J'ai ce type de probleme et j'ai bien mis mon code de load_page dans un if(!isPostBack) mais le probleme persiste. Cependant je ne voudrais pas mettre a false le enableEventValidation pour des raisons de securite. J'ai bien lu ton lien jesusonline mais je t'avouerais que je ne saisi pas tres bien :/. D'autant plus que la trace ne m'indiaue pour d'ou vient veritablement le probleme.

Merci d'avance
Commenter la réponse de djay99

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.