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

相同TargetControlID触发时ModalPopupExtender显示后无法隐藏问题求解

问题根因

你当前将ModalPopupExtender的TargetControlID直接绑定到了RadListBox控件,只要点击列表项就会自动触发模态框弹出。但重复选中同一项时,SelectedIndexChanged事件不会触发,后端加载逻辑没有执行,自然也没有触发模态框隐藏的逻辑,就会出现模态框常驻的问题。

解决方案

1. 前端代码调整

首先新增一个隐藏的虚拟按钮作为模态框的触发目标,避免点击列表项就自动弹框:

<asp:Button ID="btnDummy" runat="server" style="display:none;" />

修改ModalPopupExtender的属性,更换触发目标、修改BehaviorID避免和列表控件ID冲突:

<ajaxToolKit:ModalPopupExtender ID="mpeProgress" runat="server" 
    TargetControlID="btnDummy" 
    PopupDragHandleControlID="pnlProgress"
    X="1000" Y="500" 
    PopupControlID="pnlProgress" 
    BackgroundCssClass="modalBackground" 
    RepositionMode="RepositionOnWindowResize" 
    BehaviorID="mpeProgressBehavior">
</ajaxToolKit:ModalPopupExtender>

新增客户端校验逻辑,判断选中项是否和上一次一致,仅当值变化时才弹出模态框:

// 全局变量存储上一次选中的值
var lastSelectedValue = null;
function OnClientSelectedIndexChanging(sender, args) {
    var currentValue = args.get_item().get_value();
    // 选中值未变化,取消回发、不弹框
    if(currentValue === lastSelectedValue) {
        args.set_cancel(true);
        return;
    }
    // 选中值变化,更新存储值、手动弹出模态框
    lastSelectedValue = currentValue;
    $find('mpeProgressBehavior').show();
}

给你的RadListBox绑定上述客户端事件:

<telerik:RadListBox ID="lboxTestedMachines" runat="server" 
    OnClientSelectedIndexChanging="OnClientSelectedIndexChanging" 
    AutoPostBack="true"
    <!-- 其他原有属性 -->
>

2. 后端代码调整

在SelectedIndexChanged事件的所有逻辑执行完成后,注册脚本主动隐藏模态框:

protected void lboxTestedMachines_SelectedIndexChanged(object sender, EventArgs e)
{
    int iResultID = Convert.ToInt32(lboxTestedMachines.SelectedValue);

    if (tbl_charts.Style.Value != "display:normal")
        tbl_charts.Style.Value = "display:normal";

    GetMachineName(iResultID);

    RdListView_Chart.DataSource = LoadCassetteForFoodChart(iResultID);
    RdListView_Chart.DataBind();// 若原有代码已写绑定逻辑可删除此行

    GetApprovalRejectionStatus(iResultID);

    // 新增:执行完所有逻辑后隐藏模态框
    ScriptManager.RegisterStartupScript(this, this.GetType(), "hideMpe", "$find('mpeProgressBehavior').hide();", true);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:00:01