ASP Gridview "Select All" Javascript 问题

ASP Gridview "Select All" issue with Javascript

我收到了一个旧的 ASP.NET 代码,用于审查并以最小的努力解决问题。在检查代码时,我发现它使用简单的 ASP Gridview,然后选择带有 JavaScript 的所有行。它还与 Jquery 数据表集成。这是 Gridview 的代码 -

<asp:UpdatePanel ID="UpdatePanelgv" runat="server">
    <ContentTemplate>
        <asp:GridView ID="gv1" runat="server" UseAccessibleHeader="true" AutoGenerateColumns="False"
        DataKeyNames="ID,NAME,SALARY" Height="125px" Width="100%" OnPreRender="gv1_PreRender">
            <Columns>
                <asp:TemplateField ControlStyle-Width="30px">
                    <HeaderTemplate>
                        <asp:CheckBox ID="allchk" runat="server" onclick="javascript:toggle(this);" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="selectchk" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
                <asp:BoundField DataField="NAME" HeaderText="NAME" SortExpression="NAME" />
                <asp:BoundField DataField="SALARY" HeaderText="SALARY" SortExpression="SALARY" ControlStyle-Width="125" />
            </Columns>
                <EmptyDataTemplate>
                    <label style="font-weight: bold; text-align: center">
                        No Records Available
                </EmptyDataTemplate>
                <EmptyDataRowStyle HorizontalAlign="Center" />
        </asp:GridView>
</asp:UpdatePanel>

这里是 Javascript 切换选择 -

<script type="text/javascript">
        function toggle(source) {
            var checkboxes = document.querySelectorAll('input[type="checkbox"]');
            for (var i = 0; i < checkboxes.length; i++) {
                if (checkboxes[i] != source)
                    checkboxes[i].checked = source.checked;
            }
        }
</script>

在此处加载页面时,他们如何集成数据表 -

ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "", "<script type='text/javascript'>$(document).ready(function () { $('#gv1').dataTable({autowidth: false}).yadcf([{ column_number: 1 },{ column_number: 2 },{ column_number: 3 }]);});<" + "/script>", False)

分页、数据表、yadcf、搜索、排序等基本功能正常运行。如果我停留在 PAGE-1,点击 "Select All" 复选框,它也工作正常。

但是当我转到任何其他页面(比如分页 3)并单击 "Select All" 复选框时,问题就出现了。它使我恢复到 PAGE-1,保持 PAGE-3 上的选择不变。如果我再次返回 PAGE-3,我可以看到所有被选中的行。

我无法理解或解决为什么在单击其他 PAGE 的 "Select All" 复选框后总是切换到 PAGE-1。如何解决这个问题?这是由于 UpdatePanel 造成的吗?如果是,如何在不删除该标签的情况下解决这个问题?

注意:仅当我单击 "Select All" 复选框而不是单个行复选框时才会发生这种情况。

我发现了问题。这是由于 jquery 数据表的第一列的默认排序 属性 而发生的。我已经通过修改这个改变了数据表初始化 -

ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "", "<script type='text/javascript'>$(document).ready(function () { $('#gv1').dataTable({autowidth: false}).yadcf([{ column_number: 1 },{ column_number: 2 },{ column_number: 3 }]);});<" + "/script>", False)

ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "", "<script type='text/javascript'>$(document).ready(function () { $('#gv1').dataTable({autowidth: false, order: [], aoColumnDefs: [{ 'bSortable': false, 'aTargets': [0] }]}).yadcf([{ column_number: 1 },{ column_number: 2 },{ column_number: 3 }]);});<" + "/script>", False)