Ошибка обратной передачи ASP.NET

Я использую C#, чтобы открыть всплывающее окно и позволить пользователю выбрать какое-то значение из этого и отправить значение обратно на сервер. Однако, когда я закрываю всплывающее окно, я получаю следующую ошибку:


Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью <pagesenableEventValidation="true"/> в конфигурации или <%@ Page EnableEventValidation="true" %> на странице. В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который первоначально их представил. Если данные действительны и ожидаемы, используйте ClientScriptManager.RegisterForEventValidation метод для того, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки. "


Кто-нибудь знает, что может быть причиной этого?

5 ответов

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

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

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

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

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

Вы можете отключить EnableEventValidation на PAGE или в web.config, но это считается угрозой безопасности.

Вы можете попробовать:

при необходимости убедитесь, что привязки выполняются в -!Page.IsPostBack

Если ваше всплывающее окно (или что-то еще) вводит что-либо в форму, которая выполняет обратную передачу, то это может быть источником ошибки.

У меня была эта ошибка, когда при использовании ручных проводных вызовов jquery ajax для обновления каскадных списков выбора (намного быстрее, чем в aspnet ajax), новые значения, которые были помещены во вторичный выбор (который был runat=server), вызывали сбой проверки события. Вы можете либо пройти регистрацию всего этого с помощью диспетчера сценариев (что я считаю немного болезненным), либо отключить проверку событий, но это означает, что нужно немного поработать и все это проверить самостоятельно.

Наиболее распространенная причина, по которой эта ошибка возникает (для меня), заключается в том, что вы создаете элементы управления сами по себе (в коде), а не декларативно в файле.aspx. А именно, когда во время первоначального рендеринга страницы вы создаете один набор элементов управления, а во время обратной передачи вы создаете логику создания страницы (возможно, немного) другой элемент управления. Все элементы управления на странице должны создаваться и добавляться в одну и ту же позицию в дереве при каждом отображении страницы, независимо от того, находится ли она на обратной передаче или нет. В противном случае эта ошибка может привести.

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

Другие вопросы по тегам