Кнопка DataGrid - недопустимая обратная передача или обратный вызов

Я установил DataGrid с несколькими столбцами, флажком и столбцом в конце строки.

Я также меняю макет сетки данных в событии OnItemCreated, которое изменяет макет сетки данных, расширяя строки с помощью атрибута «Rowspan» и удаляя лишние столбцы и элементы управления, где они больше не требуются.

Исходный макет datagrid был настроен следующим образом:

___________________________________________
| 1 | Employee Name | 01/08/10 |[] |[SAVE]|
| 1 | Employee Name | 02/08/10 |[] |[SAVE]|
___________________________________________
| 2 | Employee Name | 01/08/10 |[] |[SAVE]|
___________________________________________
| 3 | Employee Name | 04/08/10 |[] |[SAVE]|
| 3 | Employee Name | 05/08/10 |[] |[SAVE]|
| 3 | Employee Name | 06/08/10 |[] |[SAVE]|
___________________________________________
| 4 | Employee Name | 03/08/10 |[] |[SAVE]|
___________________________________________

И теперь это выглядит так: строки развернуты, элементы управления удалены, а столбцы таблицы данных удалены ...

___________________________________________
| 1 | Employee Name | 01/08/10 |[] |[SAVE]|
|   |               | 02/08/10 |   |      |
___________________________________________
| 2 | Employee Name | 01/08/10 |[] |[SAVE]|
___________________________________________
| 3 | Employee Name | 04/08/10 |[] |[SAVE]|
|   |               | 05/08/10 |   |      |
|   |               | 06/08/10 |   |      |
___________________________________________
| 4 | Employee Name | 03/08/10 |[] |[SAVE]|
___________________________________________

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

Однако, когда я нажимаю кнопку [СОХРАНИТЬ] для конкретного сотрудника, появляется сообщение об ошибке, похожее на «Недействительный обратный вызов или обратный вызов». Я понимаю, что это результат элементов управления и столбцов, которые я удалил в сетке данных, и проверка события не соответствует исходным визуализированным элементам.

Я не хочу удалять EnableEventValidation, потому что это проблема безопасности.

Я знаю, что мне нужно использовать метод Render, чтобы исправить любые изменения, которые я сделал до отображения страницы, но как мне решить эту проблему с обратной передачей?


person laughing chocolates    schedule 06.08.2010    source источник


Ответы (1)


Хорошо, давайте посмотрим, откуда взялась ошибка.

GridView использует вызов javascript __DoPostBack () и сам не вводит данные. Таким образом, сам по себе не отправляет никаких входных данных из других ячеек.

Теперь я думаю, что вы не выполняли пользовательские вызовы DoPostBack, верно?

Второй момент проверки - это данные ViewState.

Есть ли какие-либо изменения для использования какой-либо UpdatePanel, а в середине вы делаете какие-либо обновления, которые изменяют это ViewState?

Я предлагаю вам попробовать отправить EnableViewState = "false" в ваш GridView, чтобы узнать, по-прежнему ли вы получаете эту ошибку. Это не повлияет на вас, потому что GridView при каждом обновлении перечитывает данные, которые необходимо создать.

И второй момент, который вам нужно проверить, это то, что вы изменяете свои данные и влияете на состояние просмотра. Может быть, переместив его в другую точку, решите проблему. Из примера, если он у вас есть на Page_Load, возможно, вам нужно переместить его на PageInit - или наоборот.

Надеюсь на эту помощь.

person Aristos    schedule 06.08.2010
comment
Привет, Аристос! Да, у меня есть сетка данных на панели обновлений, и теперь я отключил EnableViewState. Теперь кнопка работает правильно, и я могу прочитать значения флажков, как и ожидалось. Однако нумерация страниц сбрасывается обратно на страницу 1, независимо от того, на какой странице я нахожусь. Как мне узнать номер страницы, если я не могу получить значение из таблицы данных теперь, когда состояние просмотра удалено? Спасибо. - person laughing chocolates; 09.08.2010
comment
@laughing Невозможность сохранить страницу связана с точкой, в которой у вас есть место для чтения данных - точкой, в которой вы выполняете Bind () и устанавливаете данные в сетке данных. У вас есть место после пейджера, поэтому его потеряйте. Измените точку, в которой вы устанавливаете данные в сетке данных, переместите ее, например, на pageinit и проверьте ее. И наверное это проблема с самого начала. - person Aristos; 09.08.2010
comment
Я изменил место, где я повторно привязал данные, и сетка данных работает должным образом. - person laughing chocolates; 10.08.2010