ASP.NET: ModalPopupExtender evita que se active el evento de clic del botón
Esto es lo que estoy tratando de hacer: haga clic en un botón en mi página, que a su vez hace que (2) sucedan cosas:
Muestre un ModalPopup para evitar que el usuario presione cualquier botón o cambie valoresLlame a mi código detrás del método, ocultando el ModalPopup cuando haya terminadoAquí está el marcado 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>
Ahora, aquí está mi código detrás del código C #:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.Enabled = false;
}
¿Por qué esto no funciona? ModalPopup se muestra perfectamente, pero el evento btnSaveData_Click NUNCA se activa.
ACTUALIZAR: La primera sugerencia no funcionó para mí. También probé tu segunda sugerencia (en la medida en que se aplicaba a mí). Una pequeña diferencia de mi parte es que no hay ningún botón en mi panel modal (pnlHidden), es solo un mensaje. Intenté usar eventos Javascript en el lado del cliente, que al menos se disparó simultáneamente con mi evento del lado del servidor. Esta fue una buena noticia, pero parece que no puedo encontrar o agarrar el ModalPopupExtender o su BehaviorID. Esto no funciona:
function showOverlay() {
var popup = $find('modalPopup');
popup.show();
}
popup SIEMPRE es igual a nulo.
ACTUALIZACIÓN FINAL: Esta es mi solución final para hacer que esto funcione (tome nota específica del uso de 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>
Usando esta función Javascript:
function showModal() { $find('ShowModal').show(); }
... Y este código detrás:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.hide();
}