【发布时间】:2011-02-22 01:58:38
【问题描述】:
这是我想要做的事情:点击我页面上的一个按钮,这反过来会导致 (2) 事情发生:
- 显示一个 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();
}
popup 总是等于 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();
}
【问题讨论】:
标签: c# asp.net ajax modalpopupextender