Asp.net 2 => Invalid postback or callback argument.

Résolu
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006 - 6 mai 2006 à 20:08
djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008 - 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

16 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 mai 2006 à 12:32
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
3
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
7 mai 2006 à 18:12
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 !
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 mai 2006 à 21:32
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
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
6 mai 2006 à 21:54
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é.
0

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

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 mai 2006 à 22:53
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
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
6 mai 2006 à 22:59
Ok, je n'avais pas vu que le datagrid était obsolète, je vais essayer avec un gridview, je repasserais dire quoi
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
7 mai 2006 à 00:49
Même chose avec un GridView :/

Je sais plus trop où chercher
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 mai 2006 à 01:56
Bizarre.

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


<HR>
Cyril - MVS - MCP
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
7 mai 2006 à 11:02
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
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
7 mai 2006 à 13:16
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.
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
7 mai 2006 à 23:29
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 ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 mai 2006 à 23:47
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
0
Focalizer Messages postés 76 Date d'inscription dimanche 19 mai 2002 Statut Membre Dernière intervention 8 mai 2006
8 mai 2006 à 00:58
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 !
0
GrosJoce Messages postés 2 Date d'inscription jeudi 7 octobre 2004 Statut Membre Dernière intervention 14 juin 2006
14 juin 2006 à 09:44
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.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 juil. 2007 à 11:31
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.
0
djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008
7 août 2007 à 17:59
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
0
Rejoignez-nous