Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью '<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 ]

7 голосов
/ 30 марта 2013

(1) EnableEventValidation = "false" ................... У меня не работает.

(2) ClientScript.RegisterForEventValidation .... У меня не работает.

Решение 1:

Изменить кнопку / ImageButton на LinkButton в GridView. Оно работает. (Но мне нравится ImageButton)

Исследование: Button / ImageButton и LinkButton используют разные методы для обратной передачи

Оригинальный артикул:

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

Решение 2:

В OnInit () введите код примерно так, чтобы установить уникальный идентификатор для Button / ImageButton:

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

Оригинальный артикул:

http://www.c -sharpcorner.com / Форум / Тема / 35301 /

6 голосов
/ 11 декабря 2008

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

И чтобы получить данные, выбранные из DDL, вы можете прикрепить событие «OnChange» к DDL, чтобы собрать значение в скрытом вводе или в текстовом поле со стилем = «display: none;»

6 голосов
/ 21 апреля 2011

Я реализовал вложенную сетку и столкнулся с той же проблемой. Я использовал LinkButton вместо кнопки с изображением, например так:

до того, как у меня появился такой столбец:

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

Я заменил вот так.

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 
5 голосов
/ 14 ноября 2010

У меня была похожая проблема, но я не использовал ASP.Net 1.1 и не обновлял элемент управления через javascript. Моя проблема возникла только в Firefox, а не в IE (!).

Я добавил опции в DropDownList для события PreRender, например:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

У моего "HF" (скрытое поле) параметры были разделены новой строкой, например:

HF.value = "option 1\n\roption 2\n\roption 3";

Проблема заключалась в том, что HTML-страница была разбита (я имею в виду новые строки) в параметрах «select», представляющих DropDown.

Итак, я решил свою проблему, добавив одну строку:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

Надеюсь, это кому-нибудь поможет.

4 голосов
/ 20 февраля 2011

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

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
3 голосов
/ 05 августа 2011

У меня была та же проблема, что и я:

Только что добавили условие if(!IsPostBack) и оно отлично работает:)

3 голосов
/ 26 декабря 2013

Эта ошибка будет отображаться без обратной передачи

Добавить код:

If(!IsPostBack){

 //do something

}
2 голосов
/ 13 января 2010

Простым решением этой проблемы является использование IsPostBack проверки загрузки страницы. Это решит эту проблему.

2 голосов
/ 21 октября 2011

Я знаю, что это супер-старый пост. Предполагая, что вы звоните в свое приложение, вот идея, которая работает для меня:

  1. Реализация ICallbackEventHandler на вашей странице
  2. Вызовите ClientScriptManager.GetCallbackEventReference, чтобы вызвать код на стороне сервера
  3. Как говорится в сообщении об ошибке, вы можете вызвать ClientScriptManager.RegisterForEventValidation

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

2 голосов
/ 21 декабря 2008

Ajax UpdatePanel делает это, и я думаю, что это самый простой способ, игнорируя Ajax postback накладные расходы.

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