我正在使用Gridview,第一列是复选框。
Gridview使用分页和排序。
复选框位于UpdatePanel内部,因为我在选中复选框时使用CheckedChanged事件(不想使用完整的回发)。
每次选中复选框时,在代码隐藏中,如果需要,我会启用比较项目的按钮,除了在viewstate中选中该复选框并检查所选项目是否未达到最大值。如果达到最大项目,我将禁用剩余的未选中复选框(最大项目是一项限制,以避免用户选择更多无法在页面布局中显示的项目。)
这很有用,除了例如当你转到第2页,然后点击浏览器的后退按钮。
当您点击后退按钮时,所有已禁用的复选框都会启用,用户可以选择更多的最大值。
如果我没有为复选框使用更新面板,它会很好用,它会记住已禁用复选框,但我不想在每次选中复选框时都进行完整的回发。
有什么方法可以解决这个问题吗?
非常感谢
答案 0 :(得分:0)
我发现的解决方案是在每个Checkbox之外使用HiddenField。 Hiddenfield有每个项目的id。
然后我用子键设置一个Cookie,每个子键包含每个复选框的id。
最后在使用javascript的onload事件中,我检索cookie并检查用户按下后退按钮后仍未选中的复选框。
答案 1 :(得分:0)
完美解决方案,如果您在更新面板中有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>