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

2 голосов
/ 05 мая 2009

В этом случае добавьте идентификатор к кнопке в RowDataBound сетки. Это решит вашу проблему.

2 голосов
/ 17 февраля 2011

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

Страница с этой проблемой имела тег </form> в одном из разделов контента, таким образом, два конечных тега формы были обработаны во время выполнения, что вызвало эту проблему. Удаление дополнительной конечной метки со страницы решило эту проблему.

1 голос
/ 11 октября 2013

Это было причиной, почему я получил это:

У меня был ASP: ListBox. Изначально это было скрыто. На стороне клиента я бы заполнил его через AJAX с опциями. Пользователь выбрал один вариант. Затем, при нажатии кнопки «Отправить», сервер рассмеялся над ListBox, так как не помнил, чтобы у него были какие-либо параметры.

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

Сортировано !!!

1 голос
/ 19 декабря 2012

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

Вот пример кода для переопределения метода рендеринга (в VB и C #) и объявления потенциального значения для раскрывающегося списка ddCar.

В VB:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

или небольшое изменение в C # может быть:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

Для новичков: это должно идти в коде за файлом (.vb или .cs) или, если используется в файле aspx, вы можете обернуть в <script> теги.

1 голос
/ 22 марта 2018

Если вы используете gridview и не привязываете gridview при загрузке страницы внутри! Ispostback, то эта ошибка возникает, когда вы нажимаете на edit и удаляете строку в gridview.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }
1 голос
/ 04 мая 2011

Если вы используете панель обновления Ajax. Добавьте тег <Triggers> и внутри него вызовите кнопку или элемент управления, вызывающий postBack с помощью <asp:PostBackTrigger .../>

1 голос
/ 08 марта 2010

Я использовал datalist и получал ту же ошибку для моей кнопки. Я просто использую IsPostBack, чтобы проверить и заполнить свои элементы управления, и проблема решена! Отлично !!!

1 голос
/ 27 июля 2010

Четыре минуты назад я получил ту же ошибку. Тогда я исследовал в течение получаса, как ты. На всех форумах они обычно говорят «добавить страницу enableEvent .. = false или true». Любое предложенное решение не решило мои проблемы, пока я не нашел его. Проблема, к сожалению, в кнопке ASP.NET. Я удалил это две секунды назад. Я попытался заменить на кнопку «imagebutton», но это также было неприемлемо (потому что оно дало ту же ошибку).

Наконец я заменил на LinkButton. похоже, работает!

1 голос
/ 15 октября 2010

Для меня сработало перемещение следующего кода из page_load в page_prerender:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}
1 голос
/ 14 июня 2011

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

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