Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью '<pages enableEventValidation = "true" />' - PullRequest
229 голосов
/ 23 октября 2008

Я получаю следующую ошибку при публикации страницы со стороны клиента. У меня есть код JavaScript, который изменяет asp: ListBox на стороне клиента.

Как мы можем это исправить?

Подробности ошибок ниже:

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

Ответы [ 39 ]

1 голос
/ 23 марта 2016

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

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

1 голос
/ 02 июля 2015

Как сказал Ник Б., и это сработало для меня, в некоторых случаях вы должны удалять разрывы строк. Посмотрите на код:

-Неверный путь:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">
            Item 1</asp:ListItem>
    <asp:ListItem>
            Item 2</asp:ListItem>
    <asp:ListItem>
            Item 3</asp:ListItem>
</asp:DropDownList>

-Правильный путь:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
</asp:DropDownList>

Это произошло только для меня в IE10 +

0 голосов
/ 21 февраля 2017

В следующем примере показано, как проверить значение свойства IsPostBack при загрузке страницы, чтобы определить, отображается ли страница в первый раз или отвечает на обратную передачу. Если страница отображается в первый раз, код вызывает метод Page.Validate. Разметка страницы (не показана) содержит элементы управления RequiredFieldValidator, которые отображают звездочки, если для обязательного поля ввода не введено ни одной записи. Вызов Page.Validate приводит к тому, что звездочки отображаются сразу после рендеринга страницы, вместо того, чтобы ждать, пока пользователь нажмет кнопку «Отправить». После обратной передачи вам не нужно вызывать Page.Validate, потому что этот метод вызывается как часть жизненного цикла страницы.

 private void Page_Load()
    {
        if (!IsPostBack)
        {      
        }
    }
0 голосов
/ 24 апреля 2009

Я обошел эту точную ошибку, не добавляя ListBox в родительскую коллекцию Page / Controls. Потому что мне действительно не нужны были какие-либо функции на стороне сервера. Я просто хотел использовать его для вывода HTML-кода для пользовательского серверного элемента управления, что я и сделал в обработчике событий OnRender. Я надеялся, что использование элемента управления избавит меня от записи в ответ моего собственного html.

Это решение, вероятно, не будет работать для большинства, но оно не позволяет ASP.NET выполнять ValidateEvent для элемента управления, поскольку элемент управления не сохраняется в памяти между обратными передачами.

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

0 голосов
/ 23 сентября 2010

Проверьте ваши данные в привязке ваших элементов управления. Некоторые поврежденные данные повреждены ValidateEvent.

0 голосов
/ 11 марта 2015

FYI У меня была та же проблема с этим сообщением об ошибке, и у меня было 2 тега формы на одной странице. Был один на главной странице и один на самой странице. Как только я удалил вторую пару тегов формы, проблема исчезла.

0 голосов
/ 06 ноября 2013

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

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

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

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

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

Удалите перевод строки каретки и все работает нормально.

0 голосов
/ 21 августа 2018

Моя проблема была решена при отмене события в конце события сетки на стороне сервера.

protected void grdEducation_RowEditing(object sender, GridViewEditEventArgs e)
{
  // do your processing ...

  // at end<br />
  e.Cancel = true;
}
0 голосов
/ 02 октября 2009

Когда я добавил идентификатор в ItemDataBound, он не дал мне ошибку, но не дал мне имя команды. Возвращалось имя команды пустое. Затем я добавил имя команды, а ItemDataBound. Тогда это решило ту же проблему. Спасибо Nilesh, отличное предложение. Сработало:)

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