web-dev-qa-db-fra.com

asp.net: argument de publication ou de rappel non valide

Je reçois cette erreur:

Server Error in '/' 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) +8627417
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +360
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +346
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743

Version Information: Microsoft .NET Framework Version:2.0.50727.3623; ASP.NET Version:2.0.50727.3618

Qu'est-ce que ça veut dire?

Voici mon code:

<%@ Page EnableEventValidation="true" Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="EnterData.DataEntry.WebForm1" %>    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js" type="text/javascript"></script>

    <link href="../niceforms/niceforms-default.css" rel="stylesheet" type="text/css" />
    <script src="../niceforms/niceforms.js" type="text/javascript"></script>

    <link href="../jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        .list-problems {
        height:600px !important;
        width:200px !important;
        display:inline-block;
    }
    </style>

    <script>
        jQuery(function($) {
        //$("#occurrence_dateTextBox").mask("99/99/9999");
        //$("#<%= report_dateTextBox.ClientID %>").mask("99/99/9999");
        $("#<%= occurrence_dateTextBox.ClientID %>").datepicker();
        $("#<%= report_dateTextBox.ClientID %>").datepicker();
        //$(".datepicker").datepicker(); 

    });
    $(function() {
        $.get('../file.txt', function(data) {
            var output = data.split('\n'),
            tmp = '';
            for (i = 0; i < output.length; i++) {
                tmp += '<option value=' + output[i] + '>' + output[i] + '</option>';
            }
            $('#lstProblems').html(tmp);

        });
    });

    $(function() {
        $("select").multiselect();
    });

    function getselectedproblems() {
        var selectedLanguages = new Array();
        jQuery('#lstProblems option:selected').each(function() {
            selectedLanguages.Push(jQuery(this).val());
        });
    }

    </script>

</head>
<body><div id="container">
    <form id="form1" runat="server" class="niceform">

        <fieldset>

        <legend>Section A</legend>

        <dl>

            <dt><label for="occurrence_dateTextBox" >Occurrence Date:</label></dt>
            <dd><asp:TextBox ID="occurrence_dateTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="report_dateTextBox">Report Date:</label></dt>
            <dd><asp:TextBox ID="report_dateTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="spec_idTextBox">Specimen ID:</label></dt>
            <dd><asp:TextBox ID="spec_idTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="batch_idTextBox">Batch ID:</label></dt>
            <dd><asp:TextBox ID="batch_idTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="report_byTextBox">Report By:</label></dt>
            <dd><asp:TextBox ID="report_byTextBox" runat="server" size="50"/></dd>
        </dl>

        <dl>

            <dt><label for="identified_byTextBox">Identified ID:</label></dt>
            <dd><asp:TextBox ID="identified_byTextBox" runat="server" size="50"/></dd>
        </dl>

        </fieldset>

        <fieldset>
        <legend>Section B</legend>

        <dl>

            <dt><label for="problemTextBox">Problem:</label></dt>
            <dd><asp:TextBox ID="problemTextBox" runat="server" size="50"/></dd>


        </dl>

        <dl>
            <dt><label for="lstProblems">Problems List:</label></dt>
            <dd>
                <asp:ListBox ID="lstProblems" runat="server" SelectionMode="Multiple" CssClass="list-problems"></asp:ListBox>
            </dd>

        </dl>  

        <dl>
                <dd><select size="8" multiple="true" >
                <optgroup label="Europe">
                    <option>United Kingdom</option>
                    <option>Luxembourg</option>
                </optgroup>    
                <optgroup label="Asia">
                    <option>India</option>
                    <option>Dubai</option>
                </optgroup>
            </select> </dd>    
        </dl>
        <dl>
            <asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" 
                DataTextField="batch" DataValueField="batch" SelectionMode="Multiple" 
                Height="100px" Width="329px"></asp:ListBox>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:LOM %>" 
                SelectCommand="SELECT [batch] FROM [lom_batch]"></asp:SqlDataSource>
        </dl>

        </fieldset>

        <fieldset>
        <legend>Section C</legend>
        <dl>

            <dt><label for="section_c_issue_error_identified_byTextBox">Issue/Error Identified By:</label></dt>
            <dd><asp:TextBox ID="section_c_issue_error_identified_byTextBox" runat="server" size="50"/></dd>


        </dl>

        <dl>

            <dt><label for="section_c_commentsTextBox">Comments:</label></dt>
            <dd><asp:TextBox ID="section_c_commentsTextBox" runat="server" size="50"/></dd>


        </dl>       

        </fieldset>

        <fieldset>
        <legend>Section D</legend>
        <dl>

            <dt><label for="section_d_investigationTextBox">Investigation:</label></dt>
            <dd><asp:TextBox ID="section_d_investigationTextBox" runat="server" size="50"/></dd>


        </dl>

        </fieldset>

        <fieldset>
        <legend>Section E</legend>
        <dl>

            <dt><label for="section_e_corrective_actionTextBox">Corrective Action:</label></dt>
            <dd><asp:TextBox ID="section_e_corrective_actionTextBox" runat="server" height="200" TextMode="MultiLine" size="50"/></dd>


        </dl>


        </fieldset>

        <fieldset>
        <legend>Section F</legend>
        <dl>

            <dt><label for="section_f_commentsTextBox">Comments:</label></dt>
            <dd><asp:TextBox ID="section_f_commentsTextBox" runat="server" size="50"/></dd>


        </dl>

        </fieldset>

        <fieldset>
        <legend>Pre-Analytical</legend>
        <dl>

            <dt><label for="prePracticeCodeTextBox">Practice Code:</label></dt>
            <dd><asp:TextBox ID="prePracticeCodeTextBox" runat="server" Visible="false"/></dd>


        </dl>

        <dl>

            <dt><label for="preContactTextBox1">Contact:</label></dt>

            <dd><asp:TextBox ID="preContactTextBox" runat="server" Visible="false"/></dd>


        </dl>

        <dl>
            <dt><label for="CheckBox1">PreAnalytical?</label></dt>
            <dd> <asp:CheckBox ID="CheckBox1" runat="server" CausesValidation="false"
                            Visible="true" AutoPostBack="true" OnCheckChanged="CheckBox1_CheckedChanged"/></dd>
        </dl>

        </fieldset>

        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="SubmitData"  OnClientClick="JSfunction()"/>

    </form>

</div></body>
</html>

Qu'est-ce que je fais mal? 

Je reçois cette erreur après avoir appuyé sur le bouton d'envoi.

dans votre fichier aspx, vous devriez mettre la première ligne comme ceci: 

<%@ Page EnableEventValidation="false" %>

si vous avez déjà quelque chose comme <%@ Page, ajoutez simplement le reste => EnableEventValidation="false" %>

Je recommande de ne pas le faire.

66
Royi Namir

Si vous regardez les premières lignes de texte, vous pouvez comprendre quelle est votre erreur. 

cette fonctionnalité vérifie que les arguments des événements de publication ou de rappel proviennent du contrôle serveur qui les a restitués à l'origine

Vous éditez dynamiquement le menu déroulant lstProblems. Ainsi, lorsque vous publiez en retour, ASP.NET affiche le message "Avertissement! Entrées non valides dans le menu déroulant!" et panique en jetant cette erreur. Vous devez déterminer si désactiver la validation des événements est une solution acceptable, mais je le rechercherais avant de le faire, car l’idée est de rendre votre site plus sécurisé et gratuit.

Voici une autre réponse de stackoverflow qui explique beaucoup mieux que moi ce que je dois faire: Argument de publication ou de rappel non valide. La validation d'événement est activée à l'aide de '<pages enableEventValidation = "true" />'

30
Dave L

Si vous avez du code dans votre événement Page_Load (). Essayez d'ajouter ceci:

if (!Page.IsPostBack)
{ 
//your code here 
}
16
Syed Ali Taqi

Une autre chose à surveiller, est que cette erreur peut se produire si vous avez un imbriqué 

<form 

balise dans le formulaire .Net. 

15
TheAlbear

J'ai eu le même problème avec un dataliste que je "lie de manière dynamique, en ajoutant EnableViewState =" false "a calmé le message d'erreur. Il n’est pas nécessaire de maintenir si cela peut changer ou non à chaque appel, c’est pourquoi je le lie de manière dynamique, lol. 

7
Corey

Cette erreur peut également être provoquée par une balise <form> imbriquée dans la page maître, qui n'est pas autorisée. 

<form id="someid"></form>

Ce sera probablement la cause si vous avez ramassé un modèle et copié le code de quelque part que ce soit.

Solution

Vous devez casser l'imbrication de la balise <form>. Ce qui suit devrait devenir

<form method="" name="form1">
  <form method="" name="form2>
  </form>
</form>

devraient devenir

<form method="" name="form1">    
</form>

<form method="" name="form2>    
</form>
5
Hammad Khan

Ajouter en haut de la page

protected void Page_Load(object sender, EventArgs e)
{    
    if (!Page.IsPostBack)
    {
        //Code display data
    }
}
4
Duc Tung

si vous changez UseSubmitBehavior="True" en UseSubmitBehavior="False", votre problème sera résolu.

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
4
praveen

Ah c'est malheureux. Depuis que vous les ajoutez essentiellement asp.net côté client explose. Il est également regrettable que vous deviez désactiver EventValidation car certaines protections importantes peuvent vous aider (par exemple, une injection malveillante dans des menus déroulants) . L’autre solution consiste à créer votre propre contrôle composite, qui semble bien entendu ici. un peu plus que l'effort impliqué. Je voudrais également désactiver la validation des événements, mais veillez à ne pas faire confiance aux valeurs de la page qui pourraient être utilisées de manière malveillante en les modifiant simplement - comme des clés cachées, une injection SQL par le biais de listes déroulantes, etc.

3
Adam Tuliper - MSFT

Vous pouvez également renseigner vos données lors de l’événement prérender. De cette façon, vous pouvez conserver votre validation et rester en sécurité. Voici un exemple utilisant un répéteur.

protected void Page_PreRender(object sender, EventArgs e)
     {
        List<Objects.User> users = Application.User.GetAllUsers();

        Repeater1.DataSource = users;
        Repeater1.DataBind();
      }
2
Pieter de Vries

Vous pouvez ajouter ViewStateMode = "Disabled" 

asp: UpdatePanel ID = "UpdatePanel1" runat = "serveur" ViewStateMode = "Désactivé"

1
Jawad Siddiqui

Après avoir rencontré ce problème sur des serveurs distants (production, test, qa, stockage intermédiaire, etc.), mais pas sur des postes de travail de développement locaux, j'ai constaté que le pool d'applications était configuré avec un RequestLimit différent de 0.

Cela a amené le pool d'applications à abandonner et à répondre avec l'exception indiquée dans la question.

Quelque part au cours de mon projet installshield, la définition de son pool d'applications a été modifiée pour utiliser "3" (probablement juste un clic ou un type incorrect).

1
StingyJack

Ma solution a été d'ajouter:

ctlUpdatePanel.Update();

après contrôle obligatoire après publication. c'était dans updatepanel avec UpdateMode = attribut "Conditionnel".

1
Tone Škoda

Ce n’est probablement pas la cause de votre problème, mais j’ai remarqué que vous utilisiez optgroups dans votre menu déroulant; j’ai donc pensé que cela pourrait aider quelqu'un à se retrouver ici avec ce problème. Pour moi, je devais créer une liste déroulante qui rendrait avec optgroups, et j’ai fini par utiliser la réponse acceptée ici , mais alors qu’il rendrait le contrôle correctement, il m’a donné cette erreur. Comment je suis passé cela est détaillé dans ma réponse ici

0
Doug F

J'ai eu le même problème, deux zones de liste et deux boutons.

Les données dans les zones de liste étaient en cours de chargement depuis une base de données et vous pouvez déplacer des éléments entre les zones en cliquant sur les boutons.

Je recevais un postback invalide.

s’avère que c’est que les données contenaient des retours à la ligne que vous ne pouvez pas voir s’ils sont affichés dans la liste.

fonctionnait correctement dans tous les navigateurs sauf IE 10 et IE 11.

Supprimez les retours à la ligne et tout fonctionne correctement.

0
Nick B

J'ai eu un problème similaire à cause du copier/coller d'une autre page, ce que j'ai eu:

<form id="form1" runat="server">
    ...
    <form id="form2" runat="server">
    ....
    </form>
</form>

Je viens de supprimer la forme avec id = "form2" à l'intérieur de la forme avec id = "form1" et le problème disparu . Cela pourrait ne pas être votre problème, mais cela pourrait être quelque chose de similaire.

0
Eugene Bosikov