asp.net - form - El botón ModalPopupExtender OK click ¿no está activando el evento?
modalpopupextender responsive (8)
Tengo un botón dentro de un UpdatePanel. El botón se está utilizando como el botón Aceptar para un ModalPopupExtender. Por algún motivo, el evento de clic de botón no se activa. ¿Algunas ideas? ¿Me estoy perdiendo de algo?
<asp:updatepanel id="UpdatePanel1" runat="server">
<ContentTemplate>
<cc1:ModalPopupExtender ID="ModalDialog" runat="server"
TargetControlID="OpenDialogLinkButton"
PopupControlID="ModalDialogPanel" OkControlID="ModalOKButton"
BackgroundCssClass="ModalBackground">
</cc1:ModalPopupExtender>
<asp:Panel ID="ModalDialogPanel" CssClass="ModalPopup" runat="server">
...
<asp:Button ID="ModalOKButton" runat="server" Text="OK"
onclick="ModalOKButton_Click" />
</asp:Panel>
</ContentTemplate>
</asp:updatepanel>
Parece que un botón que se usa como botón Aceptar o CANCELAR para un ModalPopupExtender no puede tener un evento de clic. Probé esto eliminando el
OkControlID="ModalOKButton"
desde la etiqueta ModalPopupExtender, y el botón haga clic en se dispara. Tendré que encontrar otra forma de enviar los datos al servidor.
Solo estaba buscando una solución para esto :)
parece que no se puede asignar OkControlID a un control si se desea que ese control active un evento, simplemente quitando esta propiedad, conseguí que todo vuelva a funcionar.
mi código (trabajando):
<asp:Panel ID="pnlResetPanelsView" CssClass="modalPopup" runat="server" Style="display:none;">
<h2>
Warning</h2>
<p>
Do you really want to reset the panels to the default view?</p>
<div style="text-align: center;">
<asp:Button ID="btnResetPanelsViewOK" Width="60" runat="server" Text="Yes"
CssClass="buttonSuperOfficeLayout" OnClick="btnResetPanelsViewOK_Click" />
<asp:Button ID="btnResetPanelsViewCancel" Width="60" runat="server" Text="No" CssClass="buttonSuperOfficeLayout" />
</div>
</asp:Panel>
<ajax:ModalPopupExtender ID="mpeResetPanelsView" runat="server" TargetControlID="btnResetView"
PopupControlID="pnlResetPanelsView" BackgroundCssClass="modalBackground" DropShadow="true"
CancelControlID="btnResetPanelsViewCancel" />
Ninguna de las respuestas anteriores funcionó para mí. Llamé a la devolución de datos del botón en el evento OnOkScript.
<div>
<cc1:ModalPopupExtender PopupControlID="Panel1"
ID="ModalPopupExtender1"
runat="server" TargetControlID="LinkButton1" OkControlID="Ok"
OnOkScript="__doPostBack(''Ok'','''')">
</cc1:ModalPopupExtender>
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
</div>
<asp:Panel ID="Panel1" runat="server">
<asp:Button ID="Ok" runat="server" Text="Ok" onclick="Ok_Click" />
</asp:Panel>
También podría ser que el botón debe tener CausesValidation = "false". Eso funcionó para mí.
Aspx
<ajax:ModalPopupExtender runat="server" ID="modalPop"
PopupControlID="pnlpopup"
TargetControlID="btnGo"
BackgroundCssClass="modalBackground"
DropShadow="true"
CancelControlID="btnCancel" X="470" Y="300" />
//Codebehind
protected void OkButton_Clicked(object sender, EventArgs e)
{
modalPop.Hide();
//Do something in codebehind
}
Y no configure el botón Aceptar como OkControlID.
Poner en el botón: controlar el atributo "UseSubmitBehavior = false".
A menudo uso una etiqueta en blanco como TargetControlID. ex. <asp:Label ID="lblghost" runat="server" Text="" />
He visto dos cosas que hacen que el evento click no se active:
1. tienes que eliminar el OKControlID (como han mencionado otros)
2. Si está utilizando validadores de campo, debe agregar CausesValidation = "false" en el botón.
Ambos escenarios se comportaron de la misma manera para mí.
He encontrado una forma de validar un modalpopup sin una devolución de datos.
En el ModalPopupExtender configuro OnOkScript a una función, por ejemplo, ValidateBeforePostBack (), luego en la función que llamo Page_ClientValidate para el grupo de validación que quiero, hago una comprobación y, si falla, mantengo el ejemplo modal mostrado. Si pasa, llamo a __doPostBack
.
function ValidateBeforePostBack(){
Page_ClientValidate(''MyValidationGroupName'');
if (Page_IsValid) { __doPostBack('''',''''); }
else { $find(''mpeBehaviourID'').show(); }
}
Espero que esto ayude.