ASP.NET VB中DataBound GridView回发致模态弹窗关闭问题求助
解决Modal Popup Extender因回发关闭的问题
你的问题核心是整页回发导致ModalPopupExtender自动关闭,用UpdatePanel实现局部回发就能解决,具体实现步骤如下:
1. 确保页面存在ScriptManager
UpdatePanel依赖ScriptManager,先检查页面(一般是母版页或当前页)是否有这个控件,如果没有,在页面最上方添加:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
2. 用UpdatePanel包裹GridView和操作按钮
把你的GridView和Cancel按钮放到UpdatePanel内部,设置UpdatePanel的UpdateMode="Conditional",这样只有指定事件触发时才局部刷新,不会导致整页回发关闭模态框:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <td colspan="3" rowspan="4"> <asp:GridView ID="grdClientLinks" runat="server" AutoGenerateSelectButton="True" CellPadding="10" CellSpacing="10" OnSelectedIndexChanged="grdClientLinks_SelectedIndexChanged"> <SelectedRowStyle BackColor="#0066FF" /> </asp:GridView> </td> <td colspan="2" class="auto-style8"> <asp:Button ID="cmdCancelLink" runat="server" Text="Cancel" CausesValidation="False" OnClick="cmdCancelLink_Click" /> </td> </ContentTemplate> <Triggers> <!-- 绑定GridView选择事件为异步回发触发器 --> <asp:AsyncPostBackTrigger ControlID="grdClientLinks" EventName="SelectedIndexChanged" /> <!-- 绑定Cancel按钮点击事件为异步回发触发器 --> <asp:AsyncPostBackTrigger ControlID="cmdCancelLink" EventName="Click" /> </Triggers> </asp:UpdatePanel>
3. 修改后台VB.NET代码逻辑
- 对于GridView的
SelectedIndexChanged事件,只处理行选中后的业务逻辑(比如填充表单控件),不要调用ModalPopupExtender的Hide()方法:
Protected Sub grdClientLinks_SelectedIndexChanged(sender As Object, e As EventArgs) ' 这里写行选中后的逻辑,比如把选中行的数据绑定到模态框里的编辑控件 ' 不要写 ModalPopupExtender1.Hide() End Sub
- 对于Cancel按钮的
Click事件,如果只是要清空表单而不是关闭模态框,就只处理清空逻辑,同样不要调用Hide():
Protected Sub cmdCancelLink_Click(sender As Object, e As EventArgs) ' 清空模态框里的输入控件内容 ' 不要写 ModalPopupExtender1.Hide() End Sub
关键注意事项
- 如果你的Cancel按钮确实需要关闭模态框,那保留
ModalPopupExtender1.Hide()即可,但其他操作(比如GridView选中)要确保不触发关闭。 - 确认ModalPopupExtender的
PopupControlID指向的是包含UpdatePanel的模态容器,确保局部回发不会影响模态框的显示状态。
内容的提问来源于stack exchange,提问作者Westie73
相关产品推荐
相关产品推荐

