asp.net: недопустимый аргумент обратной передачи или обратного вызова

Я получаю эту ошибку:

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

Что это значит?

Вот мой код:

<%@ 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>

Что я делаю неправильно?

Я получаю эту ошибку после нажатия кнопки отправки.

17 ответов

Решение

В вашем файле ASPX вы должны поставить первую строку, как это:

<%@ Page EnableEventValidation="false" %>

если у вас уже есть что-то вроде <%@ Page так что просто добавьте остальные => EnableEventValidation="false" %>

Я рекомендую не делать этого.

Если вы посмотрите на первые строки текста, вы сможете понять, в чем ваша ошибка.

эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который первоначально их представил

Вы динамически редактируете выпадающий список lstProblems, поэтому при повторной публикации ASP.NET говорит: "Предупреждение! Недопустимые записи в выпадающем списке!" и волнуется, бросая эту ошибку. Вы должны определить, является ли отключение проверки событий приемлемым решением, но я бы изучил его, прежде чем делать это, поскольку основная идея заключается в том, чтобы сделать ваш сайт более безопасным бесплатно.

Вот еще один ответ от stackru, который гораздо лучше объясняет, что делать, чем я: Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью ''

Если у вас есть код в вашем событии Page_Load(). Попробуйте добавить это:

if (!Page.IsPostBack)
{ 
//your code here 
}

Еще одна вещь, на которую следует обратить внимание, это то, что эта ошибка может произойти, если у вас есть

<form

тег в форме.Net.

У меня была такая же проблема со списком данных, который я динамически связывал, добавив EnableViewState="false", чтобы закрыть сообщение об ошибке. Я полагаю, что если я связываю программно, то элемент управления заполняется в каждом посте назад, состояние просмотра не ' Это нужно поддерживать, если оно может меняться или не меняться при каждом обратном вызове, поэтому я динамически связываю его, смеется.

Эта ошибка также может быть вызвана вложенным <form> тег на главной странице, который не допускается.

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

Это, вероятно, будет причиной, если вы взяли шаблон и скопировали код откуда-то, как он.

Решение

Вы должны сломать вложение <form> тег. Следующее должно стать

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

должен стать

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

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

Добавить на верхнюю страницу

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

Если вы измените UseSubmitBehavior="True" в UseSubmitBehavior="False" Ваша проблема будет решена.

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

Ах, к сожалению, Поскольку вы добавляете их по существу, клиентская часть asp.net взрывается. К сожалению, вам придется отключить EventValidation, так как есть несколько важных средств защиты, которые помогают (например, злая инъекция в выпадающие списки). Другой альтернативой является создание собственного составного элемента управления, который, конечно, здесь кажется немного большим, чем прилагаемые усилия. Я бы, вероятно, тоже отключил проверку событий, но будьте очень осторожны, чтобы не доверять никаким значениям со страницы, которые могут быть использованы неверным образом, просто меняя их - например, скрытые ключи, SQL-инъекции через поля со списком и т. Д.

Вы также можете заполнить свои данные в событии prerender. Таким образом, вы можете сохранить свою проверку и оставаться в безопасности. Вот пример использования ретранслятора.

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

        Repeater1.DataSource = users;
        Repeater1.DataBind();
      }

Мое решение было добавить:

ctlUpdatePanel.Update();

после контроля привязки после обратной передачи. это было в панели обновления с атрибутом UpdateMode="Conditional".

После возникновения этой проблемы на удаленных серверах (производственный, тестовый, qa, промежуточный и т. Д.), Но не на локальных рабочих станциях разработки, я обнаружил, что пул приложений был настроен с RequestLimit, отличным от 0.

Это заставило пул приложений сдаться и ответить с исключением, отмеченным в вопросе.

Где-то на пути моего проекта installshield определение пула приложений было изменено на "3" (возможно, просто ошибочный или неправильный тип).

Вы можете добавить ViewStateMode = "Disabled"

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

Вероятно, это не причина вашей проблемы, но я заметил, что вы используете optgroups в вашем раскрывающемся списке, поэтому я подумал, что это может помочь кому-то, если он окажется здесь с этой проблемой. Для меня мне нужно было создать выпадающий список, который будет отображаться с optgroups, и я решил использовать принятый здесь ответ, но, хотя он правильно отобразил элемент управления, он дал мне эту ошибку. Как я прошел, подробно описано в моем ответе здесь.

У меня была такая же проблема, два списка и две кнопки.

Данные в списках загружались из базы данных, и вы могли перемещать элементы между полями, нажимая кнопки.

Я получил неправильный постбэк.

Оказывается, это были данные, в которых содержались переводы строки возврата каретки, которые вы не видите при отображении в окне списка.

отлично работал во всех браузерах, кроме IE 10 и IE 11.

Снимите каретку с обратной линии и все нормально работает.

У меня была похожая проблема из-за копирования вставки с другой страницы, что я получил:

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

Я просто удалил форму с id="form2" внутри формы с id="form1" и проблема исчезла. Это может быть не вашей проблемой, но может быть чем-то похожим.

Моя проблема была в том, что у меня были вложенные теги формы. После удаления внутреннего разобрался за меня.

Другие вопросы по тегам