这是我想要做的事情:在我的页面上点击一个按钮,然后发生以下两件事情:
- 显示一个 ModalPopup 防止用户按任何按钮或更改值
- 调用我的代码后端方法,在完成后隐藏 ModalPopup
这是 ASP 标记:
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true"
UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSaveData" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Panel ID="pnlHidden" runat="server" style="display: none;">
<div>
<h1>Saving...</h1>
</div>
</asp:Panel>
<cc1:ModalPopupExtender ID="modalPopup"
BackgroundCssClass="modalBackground" runat="server"
TargetControlID="btnSaveData" PopupControlID="pnlHidden"
BehaviorID="ShowModal">
</cc1:ModalPopupExtender>
<asp:Button ID="btnSaveData" runat="server" Text="Save Data"
OnClick="btnSaveData_Click" />
</ContentTemplate>
</asp:UpdatePanel>
现在,这是我的 C# 代码后台:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.Enabled = false;
}
为什么这个不起作用?ModalPopup 显示完美,但 btnSaveData_Click 事件永远不会触发。更新:第一个建议对我没有用。我也尝试了你的第二个建议(只要它适用于我)。我的情况有一个小区别,即我的模态面板(pnlHidden)上没有按钮,只有一条消息。我尝试在客户端使用 JavaScript 事件,至少与我的服务器端事件同时触发。这是个好消息,但我似乎找不到或抓住 ModalPopupExtender 或其 BehaviorID 的句柄。这行不通:
function showOverlay() {
var popup = $find('modalPopup');
popup.show();
}
弹出窗口始终等于null。
最终更新:这是我最终解决方案,使其正常工作(特别注意使用OnClientClick和OnClick):
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true"
UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSaveData" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Panel ID="pnlHidden" runat="server" style="display: none;">
<div>
<h1>Saving...</h1>
</div>
</asp:Panel>
<cc1:ModalPopupExtender ID="modalPopup"
BackgroundCssClass="modalBackground" runat="server"
TargetControlID="hdnField" PopupControlID="pnlHidden"
BehaviorID="ShowModal">
<asp:HiddenField ID="hdnField" runat="server" />
</cc1:ModalPopupExtender>
<asp:Button ID="btnSaveData" runat="server" Text="Save Data"
OnClientClick="showModal();" OnClick="btnSaveData_Click" />
</ContentTemplate>
</asp:UpdatePanel>
使用这个Javascript函数:
function showModal() { $find('ShowModal').show(); }
...还有这段背后的代码:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.hide();
}