You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET如何不用UpdatePanel实现GridView复选框无刷新互斥选中

解决方案

你可以完全通过前端JavaScript实现复选框互斥逻辑,移除服务端回发逻辑即可实现无刷新效果,具体修改步骤如下:

步骤1:修改GridView前端代码

移除CheckBox的AutoPostBack="true"属性和服务端OnCheckedChanged事件绑定,给两个复选框增加自定义CSS类用于前端选择:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" BackColor="White">
    <Columns>    
        <asp:TemplateField HeaderText="morakhasi" ItemStyle-Width="80">
            <ItemTemplate>
                <asp:CheckBox ID="chkboxMorakhasi" runat="server" CssClass="chk-morakhasi"/>
            </ItemTemplate>
            <HeaderStyle Font-Size="16px" Width="80px" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="taiid" ItemStyle-Width="80">
            <ItemTemplate>
                <asp:CheckBox ID="chkboxTaiid" runat="server" Checked="True" CssClass="chk-taiid" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>    
</asp:GridView>

步骤2:添加前端JavaScript互斥逻辑

在页面中添加如下JS代码,实现同一行两个复选框的互斥选中效果:

// 页面加载完成后绑定事件
document.addEventListener('DOMContentLoaded', function() {
    // 绑定所有morakhasi复选框的变更事件
    document.querySelectorAll('.chk-morakhasi').forEach(function(chk) {
        chk.addEventListener('change', function() {
            if (this.checked) {
                // 找到当前行的taiid复选框,取消选中
                let row = this.closest('tr');
                row.querySelector('.chk-taiid').checked = false;
            }
        });
    });

    // 绑定所有taiid复选框的变更事件
    document.querySelectorAll('.chk-taiid').forEach(function(chk) {
        chk.addEventListener('change', function() {
            if (this.checked) {
                // 找到当前行的morakhasi复选框,取消选中
                let row = this.closest('tr');
                row.querySelector('.chk-morakhasi').checked = false;
            }
        });
    });
});

如果你的项目使用了jQuery,也可以用更简洁的写法:

$(function() {
    $('.chk-morakhasi').on('change', function() {
        if (this.checked) {
            $(this).closest('tr').find('.chk-taiid').prop('checked', false);
        }
    });
    $('.chk-taiid').on('change', function() {
        if (this.checked) {
            $(this).closest('tr').find('.chk-morakhasi').prop('checked', false);
        }
    });
});

步骤3:删除冗余服务端代码

把后台原来的chkboxTaiid_CheckedChanged和chkboxMorakhasi_CheckedChanged两个方法直接删除即可。

注意事项

  • 前端修改的复选框选中状态会正常保留在视图状态中,提交表单时你依然可以通过原来的FindControl方式在后台获取每个复选框的选中值,逻辑和之前完全一致。
  • 该方案完全不需要页面回发,哪怕GridView数据量很大也不会出现卡顿问题,性能远高于服务端回发或者UpdatePanel方案。

内容的提问来源于stack exchange,提问作者farzaneh br

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:24:01