Недопустимый аргумент обратной передачи или обратного вызова. Проверка события включена с помощью' <страницы enableEventValidation = “верный”/>'

233
задан Julius A 21 April 2011 в 01:37
поделиться

13 ответов

Проблема состоит в том, что ASP.NET не узнает об этом дополнительный или удаленный listitem. Вы (упомянули ниже) число вариантов:

  • Отключают eventvalidation (плохая идея, потому что Вы теряете немного безопасности, которое идет с очень небольшим количеством стоимости).
  • ASP.NET Ajax UpdatePanel Использования. (Поместите поле списка в Updatepanel и инициируйте обновление, если Вы добавляете или удаляете поле списка. Таким образом, состояние отображения и смежные области получают обновления, и eventvalidation передаст.)
  • Забывают клиентский и используют классическую обратную передачу и добавляют или удаляют listitems серверную сторону.

я надеюсь, что это помогает.

169
ответ дан norbertB 23 November 2019 в 03:31
поделиться

У меня был опыт с DataGrid. Один из него - столбцы, была кнопка "Select". Когда я нажимал кнопку "Select" любой строки, я получил это сообщение об ошибке:

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

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

1) я изменил атрибут страницы на EnableEventValidation="false". , Но это не работало. (не только это опасное из соображения безопасности, мой обработчик событий не назвали: void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) я реализовал ClientScript.RegisterForEventValidation в Методе рендеринга. , Но это не работало.

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) я изменил свой тип кнопки в столбце сетки с PushButton до LinkButton. Это работало! ("ButtonType = "LinkButton"). Я думаю, можно ли изменить кнопку на другие средства управления как "LinkButton" в других случаях, это работало бы правильно.

39
ответ дан Amir Chatrbahr 23 November 2019 в 03:31
поделиться

Вы действительно собираетесь хотеть сделать 2 или 3, не отключайте проверку события.

существует две основных проблемы с добавляющими объектами к asp:listbox стороне клиента.

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

  • второе - то, что даже при отключении проверки события когда страница становится отправленной назад, объекты в поле списка будут восстановлены от состояния отображения, таким образом, любые изменения, которые Вы внесли на клиенте, будут потеряны. Причина этого состоит в том, что asp.net не ожидает, что содержание поля списка будет изменено на клиенте, оно только ожидает, что выбор будет сделан, таким образом, оно отменит любые изменения, Вы, возможно, сделали.

наилучший вариант, скорее всего, будет использовать панель обновления, как был рекомендован. Другая опция, если действительно необходимо сделать эту сторону клиента, состоит в том, чтобы использовать простое <select> вместо <asp:ListBox>, и сохранять список объектов в скрытом поле. Когда страница представляет на клиенте, можно заполнить ее от разделения содержания текстового поля.

Затем когда Вы готовы отправить его, Вы повторно заполняете содержание скрытого поля от своего измененного <select>. Затем конечно, необходимо разделить это снова на сервере и сделать что-то с объектами, так как выбор пуст теперь, когда это вернулось на сервере.

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

27
ответ дан Andy C. 23 November 2019 в 03:31
поделиться

Ajax UpdatePanel делает его, и я думаю, что это самым легким путь, игнорируя обратная передача Ajax наверху.

2
ответ дан netseng 23 November 2019 в 03:31
поделиться

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

И выбрать данные из DDL, можно присоединить событие "OnChange" к DDL для сбора значения в скрытом Входе или в текстовом поле со Стилем = "дисплей:ничего;"

8
ответ дан MyEname 23 November 2019 в 03:31
поделиться

3: Я изменил свой тип кнопки в столбце сетки от "Кнопки" до "LinkButton". Это работало! ("ButtonType = "LinkButton") я думаю, можно ли изменить кнопку на другие средства управления как "LinkButton" в других случаях, это работало бы правильно.

мне жаль, что я не мог проголосовать за Вас, Эмир (увы, мой представитель является слишком низким.) Я просто имел эту проблему и изменялся, это работало как чемпион над моим gridview. Просто немного в стороне, я думаю, что действительный код: ButtonType = "Ссылка"

я подозреваю, что это вызвано тем, что при нажатии на 'редактирование' редактирование изменяется на 'обновление' и 'отмену', которые затем возвращаются, чтобы 'отредактировать' на, отправляют. И эти средства управления смещением делают .NET обеспокоенным.

7
ответ дан brian welch 23 November 2019 в 03:31
поделиться

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

2
ответ дан 23 November 2019 в 03:31
поделиться

У меня была такая же проблема с повторителем, потому что у меня была веб-страница с элементом управления повторителем на веб-сайте, на котором был включен EnableEventValidation. Это было нехорошо. Я получал недопустимые исключения, связанные с обратной передачей.

Что сработало для меня, так это установить EnableViewState = "false" для Repeater. Преимущества заключаются в том, что его проще использовать, так же просто как отключить проверку событий для веб-сайта или веб-страницы, но объем намного меньше, чем отключение проверки событий для любого из них.

17
ответ дан 23 November 2019 в 03:31
поделиться

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

2
ответ дан 23 November 2019 в 03:31
поделиться

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

1
ответ дан 23 November 2019 в 03:31
поделиться

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

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

1
ответ дан 23 November 2019 в 03:31
поделиться

Я исправил эту точную ошибку, не добавляя ListBox в родительскую коллекцию Page / Controls. Потому что мне действительно не нужны были какие-либо функции на стороне сервера. Я просто хотел использовать его для вывода HTML для пользовательского серверного элемента управления, что я и сделал в обработчике событий OnRender. Я надеялся, что использование элемента управления избавит меня от записи в ответ моего собственного html.

Это решение, вероятно, не будет работать для большинства, но не позволяет ASP.NET выполнить ValidateEvent против элемента управления, поскольку элемент управления не ' не сохраняются в памяти между постбэками.

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, которого не было в списке предыдущего постбэка. Incase, который помогает любому.

Я просто хотел использовать его для вывода HTML для пользовательского серверного элемента управления, что я и сделал в обработчике событий OnRender. Я надеялся, что использование элемента управления спасет меня от записи в ответ моего собственного html.

Это решение, вероятно, не будет работать для большинства, но не позволяет ASP.NET выполнять ValidateEvent против элемента управления, поскольку элемент управления не ' не сохраняются в памяти между постбэками.

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, которого не было в списке предыдущего постбэка. Incase, который помогает любому.

Я просто хотел использовать его для вывода HTML для пользовательского серверного элемента управления, что я и сделал в обработчике событий OnRender. Я надеялся, что использование элемента управления избавит меня от записи в ответ моего собственного html.

Это решение, вероятно, не будет работать для большинства, но не позволяет ASP.NET выполнить ValidateEvent против элемента управления, поскольку элемент управления не ' не сохраняются в памяти между постбэками.

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, которого не было в списке предыдущего постбэка. Incase, который помогает любому.

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

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, которого не было в списке предыдущего предыдущего возврата. Incase, который помогает любому.

NET от выполнения ValidateEvent против элемента управления, потому что элемент управления не сохраняется в памяти между обратными передачами.

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, которого не было в списке предыдущего предыдущего возврата. Incase, который помогает любому.

0
ответ дан 23 November 2019 в 03:31
поделиться

Когда я добавлял идентификатор в ItemDataBound, он не выдавал мне ошибки, но не давал мне имени команды. Он возвращал пустое имя команды. Затем я добавил имя команды, а ItemDataBound. Потом решила ту же проблему. Спасибо, Нилеш, отличное предложение. Это сработало :)

0
ответ дан 23 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: