Вот что я пытаюсь сделать: Нажмите кнопку на моей странице, что, в свою очередь, приводит к (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();
}
всплывающее окно ВСЕГДА равно нулю.
ФИНАЛЬНОЕ ОБНОВЛЕНИЕ: Это мое окончательное решение для того, чтобы заставить это работать (обратите особое внимание на использование OnClientClick AND 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();
}