Подтвердить что ты не робот

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>

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

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

4b9b3361

Ответ 1

в файле aspx вы должны поместить первую строку следующим образом:

<%@ Page EnableEventValidation="false" %>

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

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

Ответ 2

Если вы посмотрите на первые строки текста, вы можете получить информацию о своей ошибке.

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

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

Вот еще один ответ stackoverflow, который делает намного лучшую работу, объясняя, что мне делать: Недопустимый аргумент обратной связи или обратного вызова. Проверка событий активируется с использованием "< pages enableEventValidation =" true "/ > "

Ответ 3

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

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

Ответ 4

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

<form

тег

в форме. Net.

Ответ 5

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

Ответ 6

Эта ошибка также может быть вызвана вложенным тегом <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>

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

ctlUpdatePanel.Update();

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

Ответ 12

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

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

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

Ответ 13

Вы можете добавить ViewStateMode = "Отключено"

asp: UpdatePanel ID = "UpdatePanel1" runat = "server" ViewStateMode = "Отключено"

Ответ 14

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

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

Я получил недопустимую обратную передачу.

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

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

Извлеките каналы линии возврата каретки, и все работает нормально.

Ответ 15

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

Ответ 16

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

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

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

Ответ 17

Для нас проблема происходила случайным образом только в производственной среде. RegisterForEventValidation ничего не сделал для нас.

Наконец, мы выяснили, что в веб-ферме, в которой работало приложение asp.net, на двух серверах IIS были установлены разные версии .net. Похоже, у них были разные правила для шифрования хеша проверки asp.net. Обновление их решило большую часть проблемы.

Кроме того, мы настроили machineKey (compatibilityMode) (одинаковый на обоих серверах), httpRuntime (targetFramework), ValidationSettings: UnobtrusiveValidationMode, pages (renderAllHiddenFieldsAtTopOfForm) в web.config обоих серверов.

Мы использовали этот сайт для генерации ключа https://www.allkeysgenerator.com/Random/ASP-Net-MachineKey-Generator.aspx

Мы потратили много времени на решение этой проблемы, надеюсь, это кому-нибудь поможет.

<appSettings>
   <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
...
</appSettings>
<system.web>
   <machineKey compatibilityMode="Framework45" decryptionKey="somekey" validationKey="otherkey" validation="SHA1" decryption="AES />
   <pages [...] controlRenderingCompatibilityVersion="4.0" enableEventValidation="true" renderAllHiddenFieldsAtTopOfForm="true" />
   <httpRuntime [...] requestValidationMode="2.0" targetFramework="4.5" />
...
</system.web>

Ответ 18

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