Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDernière intervention 8 mai 2006
-
6 mai 2006 à 20:08
djay99
Messages postés22Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention12 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
A voir également:
Asp.net 2 => Invalid postback or callback argument.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 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") %>
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDerniè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 :)
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDerniè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é.
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 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.
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDerniè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")
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDerniè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.
Focalizer
Messages postés76Date d'inscriptiondimanche 19 mai 2002StatutMembreDerniè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.
GrosJoce
Messages postés2Date d'inscriptionjeudi 7 octobre 2004StatutMembreDernière intervention14 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 ?
djay99
Messages postés22Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention12 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.