webentwicklung-frage-antwort-db.com.de

asp.net: Ungültiges Postback- oder Rückrufargument

Ich erhalte diesen Fehler:

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

Was heißt das?

Hier ist mein 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>

Was mache ich falsch? 

Diese Fehlermeldung wird angezeigt, nachdem ich auf die Schaltfläche "Senden" geklickt habe.

in Ihrer ASPX-Datei sollten Sie die erste Zeile wie folgt einfügen: 

<%@ Page EnableEventValidation="false" %>

wenn Sie bereits etwas wie <%@ Page haben, fügen Sie einfach den Rest hinzu => EnableEventValidation="false" %>

Ich empfehle es nicht zu machen.

66
Royi Namir

Wenn Sie sich die ersten Textzeilen ansehen, können Sie nachlesen, was Ihr Fehler ist.

Mit dieser Funktion wird überprüft, ob Argumente für Postback- oder Callback-Ereignisse von dem Serversteuerelement stammen, von dem sie ursprünglich gerendert wurden.

Sie bearbeiten das Dropdown-Menü "lstProblems" dynamisch. Wenn Sie also ASP.NET zurückschicken, wird "Warning! Invalid entries in the dropdown!" und flippt aus diesen Fehler zu werfen. Sie müssen feststellen, ob das Deaktivieren der Ereignisvalidierung eine akzeptable Lösung ist. Ich würde dies jedoch vorab untersuchen, da die Idee dahinter darin besteht, Ihre Website kostenlos sicherer zu machen.

Hier ist eine weitere Stackoverflow-Antwort, mit der ich viel besser erklären kann, was zu tun ist als ich: ngültiges Postback- oder Callback-Argument. Die Ereignisvalidierung wird mit '<pages enableEventValidation = "true" />' aktiviert

31
Dave L

Wenn sich in Ihrem Ereignis Page Load () Code befindet. Versuchen Sie Folgendes hinzuzufügen:

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

Eine andere Sache, auf die Sie achten sollten, ist, dass dieser Fehler auftreten kann, wenn Sie verschachtelt sind 

<form 

tag im .Net-Formular. 

15
TheAlbear

Ich hatte das gleiche Problem mit einem Datalisten, den ich dynamisch verknüpfend füge, indem er EnableViewState = "false" hinzufügte, die Fehlermeldung stummgeschaltet wurde. Es muss gepflegt werden, wenn es bei jedem Rückruf geändert werden kann oder nicht. Deswegen binde ich es dynamisch, lol. 

7
Corey

Dieser Fehler kann auch durch das verschachtelte <form>-Tag in der Masterseite verursacht werden, das nicht zulässig ist. 

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

Dies ist wahrscheinlich die Ursache, wenn Sie eine Vorlage abgerufen und den Code von irgendwoher kopiert haben.

Lösung

Sie müssen die Verschachtelung des <form>-Tags aufheben. Folgendes sollte werden

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

soll werden

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

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

Auf der oberen Seite hinzufügen

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

wenn Sie UseSubmitBehavior="True" in UseSubmitBehavior="False" ändern, wird Ihr Problem gelöst.

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

Ah, es ist unglücklich. Da Sie sie hinzufügen, springt im Wesentlichen die clientseitige asp.net. Es ist auch bedauerlich, dass Sie EventValidation deaktivieren müssen, da es einige wichtige Schutzmaßnahmen gibt, die hilfreich sind (zum Beispiel das Eindringen bösartiger Objekte in Dropdown-Boxen) .. Die andere Alternative besteht darin, eine eigene zusammengesetzte Steuerung zu erstellen, was natürlich hier scheint ein bisschen mehr als der Aufwand. Eventuell würde ich auch die Validierung von Ereignissen deaktivieren, aber Sie sollten sehr vorsichtig sein, dass Sie keinen Werten der Seite trauen, die auf schlechte Weise verwendet werden könnten, indem Sie sie einfach ändern - wie versteckte Schlüssel, SQL-Injektion durch Kombinationsfelder usw.

3

Sie können Ihre Daten auch im Prerender-Event eingeben. Auf diese Weise können Sie Ihre Gültigkeit behalten und sicher bleiben. Hier ist ein Beispiel mit einem Repeater.

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

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

Sie können ViewStateMode = "Disabled" hinzufügen. 

asp: UpdatePanel ID = "UpdatePanel1" runat = "server" ViewStateMode = "Deaktiviert"

1
Jawad Siddiqui

Nachdem dieses Problem auf Remote-Servern (Produktion, Test, qa, Staging usw.) aufgetreten war, jedoch nicht auf lokalen Entwicklungsarbeitsstationen, stellte ich fest, dass der Anwendungspool mit einem anderen RequestLimit als 0 konfiguriert war.

Dies hatte zur Folge, dass der App-Pool aufgab und mit der in der Frage angegebenen Ausnahme antwortete.

Während meines InstallShield-Projekts wurde die Definition des App-Pools auf "3" geändert (wahrscheinlich nur ein falscher Klick oder ein falscher Typ).

1
StingyJack

Meine Lösung bestand darin, hinzuzufügen:

ctlUpdatePanel.Update();

nach Bindungskontrolle nach Postback. Es befand sich im Updatepanel mit dem Attribut UpdateMode = "Bedingt".

1
Tone Škoda

Dies ist wahrscheinlich nicht die Ursache Ihres Problems, aber ich habe festgestellt, dass Sie in Ihrem Dropdown-Menü Optgroups verwendet haben. Ich dachte mir, dass dies jemandem helfen könnte, falls er mit diesem Problem fertig wird. Für mich musste ich eine Dropdown-Liste erstellen, die mit optgroups gerendert werden sollte. Am Ende verwendete ich die akzeptierte Antwort here , aber obwohl dies das Steuerelement richtig rendern würde, gab es diesen Fehler. Wie ich dahin gekommen bin, ist in meiner Antwort hier ausführlich beschrieben. 

0
Doug F

Ich hatte das gleiche Problem, zwei Listenfelder und zwei Schaltflächen.

Die Daten in den Listenfeldern wurden aus einer Datenbank geladen. Sie können Elemente durch Klicken auf die Schaltflächen zwischen Feldern verschieben.

Ich bekam ein ungültiges Postback.

es stellt sich heraus, dass die Daten Wagenrücklaufzeilen enthielten, die Sie nicht sehen können, wenn sie im Listenfeld angezeigt werden.

funktionierte gut in jedem Browser mit Ausnahme von IE 10 und IE 11.

Entfernen Sie die Wagenrücklaufzeilen und alles funktioniert einwandfrei.

0
Nick B

Ich hatte ein ähnliches Problem, weil ich das Kopieren von einer anderen Seite eingefügt hatte.

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

Ich habe gerade form mit id = "form2" in form mit id = "form1" entfernt und das Problem ist weggegangen . Dies könnte nicht Ihr Problem sein, aber es könnte etwas Ähnliches sein.

0
Eugene Bosikov