используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки

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

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

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

<%@ Page EnableEventValidation="false" %>

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

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


person tugberk    schedule 23.04.2011    source источник


Ответы (5)


пытаться

if (!Page.IsPostBack)

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

person Mahmoud    schedule 27.06.2012
comment
Это правильно, если код пытается изменить источник данных в сетке. - person Flea; 11.07.2013
comment
Это правда. Я использовал панель обновления un update, и я привязал данные к источнику данных в каждой обратной передаче при загрузке страницы. - person Stefano Magistri; 03.03.2017

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

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

person Pow-Ian    schedule 13.08.2013
comment
Спасибо! Установка EnableEventValidation = true в файле .aspx и добавление этого в код программной части (aspx.cs) работает для меня просто великолепно. - person B. Clay Shannon; 03.10.2020

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

    if (Page.IsPostBack == false)
    {
        this.sqlObj = new SqlServer(ConfigurationManager.ConnectionStrings["PdfReceiverConnectionString"].ToString());
        this.populateDataGrid();
    }
person Flea    schedule 11.07.2013

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

  Page.ClientScript.RegisterForEventValidation(this.UniqueID);
person Dooie    schedule 23.04.2011
comment
выдает эту ошибку: RegisterForEventValidation можно вызвать только во время Render (); - person SwissCoder; 29.11.2012
comment
мне удалось решить проблему с помощью Page.ClientScript.RegisterForEventValidation (this.UniqueID); в Render, а также помещает все привязки gv из загрузки страницы в! IspostBack stackoverflow.com/questions/2968525/ - person JJschk; 06.12.2012

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

person Flanagan Khumbula    schedule 08.07.2018