J'obtiens l'erreur suivante lorsque je publie une page du côté client. J'ai du code JavaScript qui modifie un asp: ListBox côté client.
Comment réparons nous ça?
Détails de l'erreur ci-dessous:
Server Error in '/XXX' Application.
--------------------------------------------------------------------------------
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> 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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> 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.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> 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.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
Réponses:
Le problème est qu'ASP.NET ne parvient pas à connaître cet élément de liste supplémentaire ou supprimé. Vous disposez d'un certain nombre d'options (répertoriées ci-dessous):
J'espère que ça aide.
la source
Avez-vous des codes dans vos événements si oui, alors peut-être qu'en ajoutant ce qui suit vous aidera.
Cette erreur est renvoyée lorsque vous cliquez sur votre commande et que la procédure de téléchargement est à nouveau exécutée. Dans un cycle de vie normal, il y a lieu de charger -> Cliquez sur Commande -> (de nouveau) -> Événement Process ItemCommand
la source
J'ai eu une expérience avec DataGrid. L'une de ses colonnes était le bouton "Sélectionner". Lorsque je cliquais sur le bouton "Sélectionner" d'une ligne, j'avais reçu ce message d'erreur:
J'ai changé plusieurs codes et j'ai finalement réussi. Mon parcours d'expérience:
1) J'ai changé l'attribut de page en
EnableEventValidation="false"
. Mais ça n'a pas marché. (ce n'est pas seulement dangereux pour des raisons de sécurité, mon gestionnaire d'événements n'a pas été appelé:void Grid_SelectedIndexChanged(object sender, EventArgs e)
2) J'ai implémenté la
ClientScript.RegisterForEventValidation
méthode Render. Mais ça n'a pas marché.3) J'ai changé mon type de bouton dans la colonne de la grille de
PushButton
àLinkButton
. Ça a marché! ("ButtonType =" LinkButton "). Je pense que si vous pouvez changer votre bouton pour d'autres contrôles comme" LinkButton "dans d'autres cas, cela fonctionnerait correctement.la source
Button
ne fonctionne pas quandlinkButton
travaille au même programme. Si oui, devons-nous toujours utiliserlinkButton
? Comment pourrions-nous rendre plus flexible?Vous allez vraiment vouloir faire 2 ou 3, ne désactivez pas la validation des événements.
Il y a deux problèmes principaux avec l'ajout d'éléments à un asp: côté client listbox.
Le premier est qu'il interfère avec la validation des événements. Ce qui est revenu au serveur n'est pas ce qu'il a envoyé.
La seconde est que même si vous désactivez la validation des événements, lorsque votre page sera publiée, les éléments de la zone de liste seront reconstruits à partir de l'état d'affichage, de sorte que toutes les modifications apportées au client seront perdues. La raison en est qu'un asp.net ne s'attend pas à ce que le contenu d'une listbox soit modifié sur le client, il s'attend uniquement à ce qu'une sélection soit effectuée, il rejette donc toutes les modifications que vous pourriez avoir apportées.
La meilleure option est la plus susceptible d'utiliser un panneau de mise à jour comme cela a été recommandé. Une autre option, si vous avez vraiment besoin de faire cela côté client, est d'utiliser un ancien simple
<select>
au lieu d'un<asp:ListBox>
, et de conserver votre liste d'éléments dans un champ caché. Lorsque la page s'affiche sur le client, vous pouvez la remplir à partir d'une fraction du contenu de votre champ de texte.Ensuite, lorsque vous êtes prêt à le publier, vous remplissez à nouveau le contenu du champ masqué à partir de votre modification
<select>
. Ensuite, bien sûr, vous devez le fractionner à nouveau sur le serveur et faire quelque chose avec vos éléments, car votre sélection est vide maintenant qu'elle est de retour sur le serveur.Dans l'ensemble, c'est une solution assez lourde que je ne recommanderais pas vraiment, mais si vous devez vraiment faire des modifications côté client d'une listBox, cela fonctionne. Cependant, je vous recommande vraiment de regarder dans un updatePanel avant de suivre cette voie.
la source
<select>
, ce qui a résolu le problème. Pouvez-vous me dire pourquoi Updatepanel prend beaucoup de temps pour charger des données par rapport au chargement de données ajax côté client.?J'ai eu le même problème avec un répéteur parce que j'avais une page Web avec un contrôle de répéteur dans un site Web sur lequel EnableEventValidation était activé. Ce n'était pas bon. J'obtenais des exceptions liées à la publication non valides.
Ce qui a fonctionné pour moi a été de définir EnableViewState = "false" pour le répéteur. Les avantages sont qu'il est plus simple à utiliser, aussi simple que de désactiver la validation des événements pour le site Web ou la page Web, mais la portée est beaucoup moins importante que de désactiver la validation des événements pour les deux.
la source
Rien de ce qui précède n'a fonctionné pour moi. Après avoir creusé davantage, j'ai réalisé que j'avais oublié 2 formulaires appliqués sur la page qui causait le problème.
Sachez que récemment ASP.NET a commencé à considérer les iframes dans une balise de formulaire qui contient une balise de formulaire dans le document iframe lui-même un cadre imbriqué. J'ai dû déplacer l'iframe hors de la balise de formulaire pour éviter cette erreur.
la source
J'ai eu le même problème lors de la modification d'un ListBox en utilisant JavaScript sur le client. Cela se produit lorsque vous ajoutez de nouveaux éléments à la ListBox à partir du client qui n'étaient pas là lorsque la page a été rendue.
Le correctif que j'ai trouvé consiste à informer le système de validation des événements de tous les éléments valides possibles qui peuvent être ajoutés à partir du client. Pour ce faire, vous remplacez Page.Render et appelez Page.ClientScript.RegisterForEventValidation pour chaque valeur que votre JavaScript pourrait ajouter à la zone de liste:
Cela peut être une sorte de problème si vous avez un grand nombre de valeurs potentiellement valides pour la zone de liste. Dans mon cas, je déplaçais des éléments entre deux ListBox - une contenant toutes les valeurs possibles et une autre initialement vide mais remplie avec un sous-ensemble des valeurs de la première en JavaScript lorsque l'utilisateur clique sur un bouton. Dans ce cas, il vous suffit de parcourir les éléments du premier ListBox et de les enregistrer chacun avec la deuxième zone de liste:
la source
Une autre façon non mentionnée ici est de sous-classer ListBox
C'est à dire.
ClientEventValidation désactive l'attribut System.Web.UI.SupportsEventValidation si vous le sous-classe, à moins que vous ne le rajoutiez explicitement, il n'appellera jamais la routine de validation. Cela fonctionne avec n'importe quel contrôle, et c'est le seul moyen que j'ai trouvé pour le "désactiver" sur une base de contrôle par contrôle (c'est-à-dire, pas au niveau de la page).
la source
vous essayez quelque chose comme ça, dans votre page .aspx
ajouter
vous vous sentez libre de poser n'importe quelle question!
la source
Si vous remplissez le DropdownList via le script côté client, effacez la liste avant de renvoyer le formulaire au serveur; ASP.NET ne se plaindra pas et la sécurité sera toujours activée.
Et pour obtenir les données sélectionnées dans la DDL, vous pouvez attacher un événement "OnChange" à la DDL pour collecter la valeur dans une entrée masquée ou dans une zone de texte avec Style = "display: none;"
la source
J'aimerais pouvoir vous voter, Amir (hélas, mon représentant est trop faible). J'avais juste ce problème et changer cela fonctionnait comme un champion sur ma grille. Juste un peu à part, je pense que le code valide est: ButtonType = "Link"
Je soupçonne que cela est dû au fait que lorsque vous cliquez sur «modifier», votre modification passe à «mettre à jour» et «annuler», qui redeviennent ensuite «modifier» lors de la soumission. Et ces commandes changeantes rendent .net mal à l'aise.
la source
(1) EnableEventValidation = "false" ................... Cela ne fonctionne pas pour moi.
(2) ClientScript.RegisterForEventValidation .... Cela ne fonctionne pas pour moi.
Solution 1:
Remplacez Button / ImageButton par LinkButton dans GridView. Ça marche. (Mais j'aime ImageButton)
Recherche: Button / ImageButton et LinkButton utilisent différentes méthodes pour publier
Article original:
http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
Solution 2:
Dans OnInit (), entrez le code quelque chose comme ceci pour définir un ID unique pour Button / ImageButton:
Article original:
http://www.c-sharpcorner.com/Forums/Thread/35301/
la source
J'ai implémenté une vue de grille imbriquée et j'ai rencontré le même problème. J'ai utilisé LinkButton au lieu du bouton d'image comme ceci:
avant d'avoir une colonne comme celle-ci:
J'ai remplacé comme ça.
la source
J'ai eu un problème similaire, mais je n'utilisais pas ASP.Net 1.1 ni ne mettais à jour un contrôle via javascript. Mon problème ne s'est produit que sur Firefox et non sur IE (!).
J'ai ajouté des options à une DropDownList sur l'événement PreRender comme ceci:
Mon "HF" (champ caché) avait les options séparées par la nouvelle ligne, comme ceci:
Le problème était que la page HTML était cassée (je veux dire qu'il y avait des nouvelles lignes) sur les options du "select" qui représentaient le DropDown.
J'ai donc résolu mon problème en ajoutant une ligne:
J'espère que cela aidera quelqu'un.
la source
si vous passez
UseSubmitBehavior="True"
àUseSubmitBehavior="False"
votre problème sera résolula source
J'ai eu le même problème, ce que j'ai fait:
Je viens d'ajouter une condition
if(!IsPostBack)
et cela fonctionne bien :)la source
Cette erreur s'affichera sans postback
Ajouter du code:
la source
Dans ce cas, ajoutez id au bouton dans RowDataBound de la grille. Cela résoudra votre problème.
la source
Une solution simple à ce problème consiste à utiliser la vérification IsPostBack lors du chargement de votre page. Cela résoudra ce problème.
la source
Ajax UpdatePanel le fait, et je pense que c'est le moyen le plus simple, en ignorant les frais généraux de publication Ajax .
la source
Je sais que c'est un post super ancien. En supposant que vous appelez dans votre candidature, voici une idée qui a fonctionné pour moi:
Si vous n'avez pas besoin d'un contrôle total, vous pouvez utiliser un panneau de mise à jour qui le fera pour vous.
la source
Nous avons rencontré ce même problème lors de la conversion de nos pages ASPX régulières en pages de contenu.
La page avec ce problème avait une
</form>
balise dans l'une des sections Contenu, donc deux balises de fin de formulaire ont été rendues au moment de l'exécution, ce qui a provoqué ce problème. La suppression de la balise de fin de formulaire supplémentaire de la page a résolu ce problème.la source
<form>
champs supplémentaires dans mon code.Si vous utilisez gridview et ne liez pas gridview à pageload inside! Ispostback, cette erreur se produit lorsque vous cliquez sur modifier et supprimer une ligne dans gridview.
la source
Il y a quatre minutes, j'ai reçu la même erreur. Ensuite, j'ai fait des recherches pendant une demi-heure comme vous. Dans tous les forums, ils disent généralement "ajouter une page enableEvent .. = false ou true". Toute solution proposée n'a pas résolu mes problèmes jusqu'à ce que je la trouve. Le problème est malheureusement un bouton ASP.NET. Je l'ai retiré il y a deux secondes. J'ai essayé de le remplacer par "imagebutton", mais c'était aussi inacceptable (car il donnait la même erreur).
Enfin, je l'ai remplacé par
LinkButton
. ça semble marcher!la source
J'utilisais la base de données et j'obtenais la même erreur pour mon bouton-poussoir. J'utilise simplement IsPostBack pour vérifier et remplir mes contrôles et le problème est résolu! Génial!!!
la source
Ce qui a fonctionné pour moi, c'est de déplacer le code suivant de page_load vers page_prerender:
la source
La meilleure option à faire est d'utiliser un champ caché et de ne pas désactiver la validation des événements, modifiez également chaque zone de liste, liste déroulante pour sélectionner avec l'attribut du serveur runat
la source
Si vous utilisez le panneau de mise à jour Ajax. Ajouter une
<Triggers>
balise et à l'intérieur, déclencher le bouton ou le contrôle provoquant le postBack en utilisant<asp:PostBackTrigger .../>
la source
Si vous connaissez à l'avance les données qui pourraient être remplies, vous pouvez utiliser ClientScriptManager pour résoudre ce problème. J'ai eu ce problème lors du remplissage dynamique d'une liste déroulante à l'aide de javascript sur une sélection d'utilisateurs précédente.
Voici un exemple de code pour remplacer la méthode de rendu (en VB et C #) et déclarer une valeur potentielle pour la liste déroulante ddCar.
En VB:
ou une légère variation de C # pourrait être:
Pour les débutants: Cela devrait aller dans le code derrière le fichier (.vb ou .cs) ou s'il est utilisé dans le fichier aspx, vous pouvez envelopper dans les
<script>
balises.la source
C'était la raison pour laquelle je l'obtenais:
J'avais un ASP: ListBox. Au départ, c'était caché. Côté client, je le remplirais via AJAX avec des options. L'utilisateur a choisi une option. Ensuite, en cliquant sur le bouton Soumettre, le serveur se moquait de la ListBox, car il ne se souvenait pas qu'il avait des options.
J'ai donc vérifié toutes les options de la liste avant de renvoyer le formulaire au serveur. De cette façon, le serveur ne s'est pas plaint car la liste est allée au client vide et elle est revenue vide.
Trié !!!
la source