Проблема состоит в том, что ASP.NET не узнает об этом дополнительный или удаленный listitem. Вы (упомянули ниже) число вариантов:
я надеюсь, что это помогает.
У меня был опыт с 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" в других случаях, это работало бы правильно.
Вы действительно собираетесь хотеть сделать 2 или 3, не отключайте проверку события.
существует две основных проблемы с добавляющими объектами к asp:listbox стороне клиента.
Прежде всего, это вмешивается в проверку события. То, что возвратилось к серверу, не то, что он отправил вниз.
второе - то, что даже при отключении проверки события когда страница становится отправленной назад, объекты в поле списка будут восстановлены от состояния отображения, таким образом, любые изменения, которые Вы внесли на клиенте, будут потеряны. Причина этого состоит в том, что asp.net не ожидает, что содержание поля списка будет изменено на клиенте, оно только ожидает, что выбор будет сделан, таким образом, оно отменит любые изменения, Вы, возможно, сделали.
наилучший вариант, скорее всего, будет использовать панель обновления, как был рекомендован. Другая опция, если действительно необходимо сделать эту сторону клиента, состоит в том, чтобы использовать простое <select>
вместо <asp:ListBox>
, и сохранять список объектов в скрытом поле. Когда страница представляет на клиенте, можно заполнить ее от разделения содержания текстового поля.
Затем когда Вы готовы отправить его, Вы повторно заполняете содержание скрытого поля от своего измененного <select>
. Затем конечно, необходимо разделить это снова на сервере и сделать что-то с объектами, так как выбор пуст теперь, когда это вернулось на сервере.
, В целом, это - довольно громоздкое решение, которое я действительно не рекомендовал бы, но если действительно необходимо сделать клиентские модификации поля списка, это действительно работает. Я действительно рекомендовал бы изучить updatePanel прежде, чем пойти этим путем, как бы то ни было.
Ajax UpdatePanel делает его, и я думаю, что это самым легким путь, игнорируя обратная передача Ajax наверху.
Если Вы заполняетесь, DropdownList через клиентский сценарий тогда очищают список, прежде чем отправят форму назад серверу; тогда ASP.NET не будет жаловаться, и безопасность будет все еще включена.
И выбрать данные из DDL, можно присоединить событие "OnChange" к DDL для сбора значения в скрытом Входе или в текстовом поле со Стилем = "дисплей:ничего;"
3: Я изменил свой тип кнопки в столбце сетки от "Кнопки" до "LinkButton". Это работало! ("ButtonType = "LinkButton") я думаю, можно ли изменить кнопку на другие средства управления как "LinkButton" в других случаях, это работало бы правильно.
мне жаль, что я не мог проголосовать за Вас, Эмир (увы, мой представитель является слишком низким.) Я просто имел эту проблему и изменялся, это работало как чемпион над моим gridview. Просто немного в стороне, я думаю, что действительный код: ButtonType = "Ссылка"
я подозреваю, что это вызвано тем, что при нажатии на 'редактирование' редактирование изменяется на 'обновление' и 'отмену', которые затем возвращаются, чтобы 'отредактировать' на, отправляют. И эти средства управления смещением делают .NET обеспокоенным.
В этом случае добавьте идентификатор к кнопке в RowDataBound сетки. Это решит вашу проблему.
У меня была такая же проблема с повторителем, потому что у меня была веб-страница с элементом управления повторителем на веб-сайте, на котором был включен EnableEventValidation. Это было нехорошо. Я получал недопустимые исключения, связанные с обратной передачей.
Что сработало для меня, так это установить EnableViewState = "false" для Repeater. Преимущества заключаются в том, что его проще использовать, так же просто как отключить проверку событий для веб-сайта или веб-страницы, но объем намного меньше, чем отключение проверки событий для любого из них.
Простое решение для этой проблемы состоит в том, чтобы использовать ISPostback Проверьте нагрузку на страницу. Это решит эту проблему.
Я использовал список данных и получал ту же ошибку для моей кнопки. Я просто использую IsPostBack для проверки и заполнения моих элементов управления, и проблема решена! Большой!!!
Четыре минуты назад я получил ту же ошибку. Затем я исследовал в течение получаса, как и вы. На всех форумах обычно говорят «добавить страницу enableEvent .. = false или true». Любое предложенное решение не решало моих проблем, пока я его не нашел. К сожалению, проблема заключается в кнопке ASP.NET. Снял две секунды назад. Я попытался заменить на «imagebutton», но это тоже было недопустимо (потому что давало ту же ошибку).
Наконец, я заменил на LinkButton
. Кажется, это работает!
Я исправил эту точную ошибку, не добавляя 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, который помогает любому.
Когда я добавлял идентификатор в ItemDataBound, он не выдавал мне ошибки, но не давал мне имени команды. Он возвращал пустое имя команды. Затем я добавил имя команды, а ItemDataBound. Потом решила ту же проблему. Спасибо, Нилеш, отличное предложение. Это сработало :)