Неверный аргумент обратной передачи или обратного вызова - PullRequest
0 голосов
/ 31 марта 2009

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

У меня есть страница, которая содержит сетку. Когда кнопка нажата для редактирования одной из записей в виде сетки, кнопка сначала выполняет некоторый клиентский скрипт, который выдает модальное окно для целей редактирования (устанавливается с помощью .onClientClick). В этом всплывающем окне пользователь нажимает кнопку «Обновить», которая обновляет базу данных и закрывает окно. Как только окно закрыто, должен запускаться код кнопки на стороне сервера, который вызовет функцию для обновления вида сетки. Вместо этого я получаю сообщение об ошибке:

Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью в Конфигурация или на странице. За в целях безопасности эта функция проверяет, что аргументы для обратной передачи или события обратного вызова происходят из серверный контроль, который изначально оказал их. Если данные действительны и, как ожидается, используйте ClientScriptManager.RegisterForEventValidation метод для того, чтобы зарегистрировать данные обратного или обратного вызова для проверка.

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

Какие-нибудь предложения относительно того, как я мог избежать этого?

ОБНОВЛЕНИЕ: я удалил строку кода, которая добавила скрипт на стороне клиента, и я все еще получаю ошибку. Так что я вполне уверен, что это вызвано просто обратной передачей. При ближайшем рассмотрении я понимаю, что на самом деле некоторые ListItems программно связаны с DropDownLists. Итак ... Мне, вероятно, нужно сделать ClientScriptManager.RegisterForEventValidation .... Может кто-нибудь дать мне пример того, как будет выглядеть синтаксис для выполнения? Кажется, он настроен не так, как объект ScriptManager ....

Ответы [ 5 ]

1 голос
/ 31 марта 2009

Если ваша кнопка создана в выделенном фрагменте кода (например, ваше событие RowDataBound создает новый экземпляр Button и добавляет его в ячейку), вам нужно будет заново создать эти элементы управления (с тем же 1003 * s) до этапа Control Events жизненного цикла страницы. Воссоздание кнопок в событии Load должно работать нормально.

Если ваши элементы управления созданы, и вы прикрепили обработчики к их событиям, то наиболее вероятной причиной этой ошибки является javascript, который изменяет вашу DOM / форму.

0 голосов
/ 31 июля 2014

Эта ошибка возникла при создании веб-формы ASP.Net и нажатии кнопки «Отправить».

HTML был создан с тегом, вложенным в тег, и браузер увидел, что вложенный тег закрывает форму ASP.Net. В результате скрытое поле __EVENTVALIDATION оказалось вне формы и не было отправлено на сервер.

Очистка вложенной метки от разметки решила проблему.

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

0 голосов
/ 31 марта 2009

При проверке события будет пытаться убедиться, что кто-то не добавляет значения на страницу, которые не соответствуют тому, что разрешено, когда вы обрабатывали / отображали его в первый раз. В зависимости от имеющихся у вас элементов управления, если вы выполняете полную повторную привязку вида сетки и изменяются базовые данные, это может привести к тому, что «допустимые значения» на странице не будут соответствовать тем, которые были получены в посте.

Опция, которая зависит от сценария, заключается в том, чтобы не использовать обратную передачу в этом случае, а использовать обычную ссылку для обновления страницы. В качестве альтернативы вы можете сделать EnableEventValidation = false, как было предложено, но вам нужно убедиться, что вы не полагаетесь ни на какие значения, отправленные клиенту, т. Е. В раскрывающиеся списки могут входить значения, которых нет в списке, который вы привязали.

0 голосов
/ 31 марта 2009

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

EnableEventValidation="false"

Привет !!! * * 1004

0 голосов
/ 31 марта 2009

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

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

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

...