如何在ajaxToolkit:ModalPopupExtender内显示消息且弹窗不关闭
解决ModalPopupExtender弹窗随alert关闭消失的问题
问题根源:点击弹窗内的Message按钮会触发整页回发,回发完成后原ModalPopup的状态未保留,导致alert关闭后弹窗无法维持显示。
以下是三种可行解决方案:
方案一:客户端直接触发alert(无回发,最简单)
修改前台的Message按钮,添加客户端点击事件并阻止回发:
<asp:Button ID="btnMPE_Example_Panel_Like_Browser_Message" runat="server" Text="Message" CausesValidation="false" OnClientClick="alert('Message'); return false;" />
- 点击按钮仅触发客户端alert,不会向服务器发送请求,弹窗全程保持显示。
方案二:后台注册脚本+回发后重新显示弹窗
若需在服务器端处理逻辑后再显示消息,用ScriptManager.RegisterStartupScript替代Response.Write,同时重新唤起弹窗:
修改后台代码的btnMPE_Example_Panel_Like_Browser_Message_Click方法:
protected void btnMPE_Example_Panel_Like_Browser_Message_Click(object sender, EventArgs e) { // 先弹出alert,再通过BehaviorID获取弹窗对象并重新显示 string script = "alert('Message'); $find('mpe_bhid2').show();"; ScriptManager.RegisterStartupScript(this, GetType(), "ShowMessage", script, true); }
$find('mpe_bhid2')对应ModalPopupExtender的BehaviorID="mpe_bhid2",确保能正确获取客户端弹窗实例。
方案三:局部刷新(UpdatePanel)
将弹窗内的交互内容包裹在UpdatePanel中,实现局部回发,避免整页刷新导致弹窗消失:
前台修改:
<asp:Panel ID="pnlMPE_Example_Panel_Like_Browser_Content" runat="server" style="height:945px;" BackColor="White"> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <h3>We are restricted to the Browser Height/Width</h3> <p>This panel acts as an inner browser window.</p> <asp:Label ID="lbMPE_Example_Panel_Like_Browser_Saved" runat="server" Text=""></asp:Label> <asp:Button ID="btnMPE_Example_Panel_Like_Browser_Close" runat="server" Text="Close" onclick="btnMPE_Example_Panel_Like_Browser_Close_Click" CausesValidation="false"/> <asp:Button ID="btnMPE_Example_Panel_Like_Browser_Message" runat="server" Text="Message" CausesValidation="false" onclick="btnMPE_Example_Panel_Like_Browser_Message_Click"/> </ContentTemplate> </asp:UpdatePanel> </asp:Panel>
后台修改:
protected void btnMPE_Example_Panel_Like_Browser_Message_Click(object sender, EventArgs e) { // 向UpdatePanel注册alert脚本,仅局部刷新 ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "ShowMessage", "alert('Message');", true); }
- 局部刷新不会影响弹窗的显示状态,alert关闭后弹窗依然保留。
内容的提问来源于stack exchange,提问作者Yuppski
相关产品推荐
相关产品推荐

