Gridview с флажками внутри панели обновлений, проблема с перелистыванием и кнопкой возврата

Я использую Gridview, первый столбец - это флажки.

Gridview использует разбиение на страницы и сортировку.

Флажки находятся внутри UpdatePanel, потому что я использую событие CheckedChanged, когда флажок установлен (не хочу использовать полную обратную передачу).

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

Это отлично работает, за исключением, например, когда вы переходите на страницу 2, а затем нажимаете кнопку возврата в браузере.

Когда вы нажимаете кнопку «Назад», все флажки, которые были отключены, становятся активными, и пользователь может выбрать больше, чем максимальное значение.

Если я не использую панель обновления для флажков, она отлично работает, она запоминает отключенные флажки, но я не хочу выполнять полную обратную передачу каждый раз, когда флажок установлен.

Есть ли способ решить эту проблему?

Большое спасибо


person delavega    schedule 18.08.2011    source источник


Ответы (2)


Решение, которое я нашел, заключалось в использовании HiddenField помимо каждого флажка. В Hiddenfield есть идентификатор каждого элемента.

Затем я устанавливаю Cookie с подключами, каждый подключ содержит идентификатор каждого установленного флажка.

Наконец, в событии onload с помощью javascript я извлекаю файл cookie и проверяю флажки, которые не устанавливаются после того, как пользователь нажимает кнопку возврата.

person delavega    schedule 30.08.2011

Идеальное решение, если у вас есть gridview на панели обновлений

function SelectAll(myvar) {
    if (jQuery(myvar).attr('checked')) {
        var checkboxes = jQuery(':checkbox', '#ContentGrid');
        for (i = 0; i < checkboxes.length; i++) {
            jQuery(checkboxes[i]).attr('checked', true)
        }
    }
    else {
        var checkboxes = jQuery(':checkbox', '#ContentGrid');
        for (i = 0; i < checkboxes.length; i++) {
            jQuery(checkboxes[i]).attr('checked', false)
        }
    }
        }
<asp:GridView ID="contentsGrid" runat="server"><columns>
<asp:TemplateField>
<HeaderTemplate><asp:CheckBox ID="chkAll" Text="Select" runat="Server" SelectAll(this);"     />  

</HeaderTemplate>
<ItemTemplate><asp:CheckBox ID="chkContent"     runat="Server" /></ItemTemplate></asp:TemplateField>

</columns>
</asp:GridView>
person Anmol Bali    schedule 09.08.2013
comment
пытался отформатировать ваш код - не слишком удачно ;-) Пожалуйста, отредактируйте и улучшите - person kleopatra; 09.08.2013
comment
И объясняет, что вы сделали. Цель stackoverflow - быть педагогической. - person Maxime Lorant; 09.08.2013