Выберите метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки. - PullRequest
7 голосов
/ 23 апреля 2011

ребята, у меня есть пользовательский контроль в моем приложении asp.net 3.5, и я передаю какой-то простой текст при нажатии кнопки. Кнопка находится в пользовательском контроле. но когда я запускаю событие, я получаю следующую ошибку:

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

когда я устанавливаю EnableEventValidation = "false" на страницу веб-формы, как удар. оно запускает событие;

<%@ Page EnableEventValidation="false" %>

но я думаю, что не следует устанавливать это значение. Итак, какая здесь альтернатива? появляется ошибка, говорящая, что 'использует метод ClientScriptManager.RegisterForEventValidation для регистрации данных обратной передачи или обратного вызова для проверки. ' но где я собираюсь зарегистрировать эту вещь? спасибо!

Кроме того, я использую некоторые элементы управления AjaxControlToolkit внутри моего usercontrol и некоторые вещи jquery.

Ответы [ 5 ]

3 голосов
/ 14 августа 2013

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

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

C#
protected override void Render(HtmlTextWriter writer)
{
    // Register controls for event validation
    foreach (Control c in this.Controls)
    {
        this.Page.ClientScript.RegisterForEventValidation(
                c.UniqueID.ToString()
        );
    }
    base.Render(writer);
}

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

    For Each aControl As Control In Me.Controls
        Me.Page.ClientScript.RegisterForEventValidation(aControl.UniqueID.ToString)
    Next aControl

    MyBase.Render(writer)
End Sub

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

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

2 голосов
/ 27 июня 2012

попробуй

if (!Page.IsPostBack)

перед загрузкой и привязкой данных в сетке данных

1 голос
/ 11 июля 2013

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

    if (Page.IsPostBack == false)
    {
        this.sqlObj = new SqlServer(ConfigurationManager.ConnectionStrings["PdfReceiverConnectionString"].ToString());
        this.populateDataGrid();
    }
0 голосов
/ 08 июля 2018

Проверьте ваш HTML, вложенный из тегов также приведет к тому, что

0 голосов
/ 24 апреля 2011

Вы можете оставить его включенным, а затем зарегистрировать свой элемент управления для проверки события. Добавьте следующий вызов в жизненный цикл страницы PreRender или Render, чтобы ваш элемент управления работал без необходимости выключать eventValidation:

  Page.ClientScript.RegisterForEventValidation(this.UniqueID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...