Pregunta

Tengo un botón dentro de un UpdatePanel. El botón se está utilizando como botón OK para un ModalPopupExtender. Por alguna razón, el evento de clic del botón no se activa. ¿Algunas ideas? ¿Me estoy perdiendo 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>
¿Fue útil?

Solución

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 OK como OkControlID.

Otros consejos

Parece que un botón que se utiliza como botón OK o CANCELAR para un ModalPopupExtender no puede tener un evento de clic. Probé esto eliminando el

OkControlID="ModalOKButton"

de la etiqueta ModalPopupExtender y se activa el clic del botón. Tendré que encontrar otra forma de enviar los datos al servidor.

También podría ser que el botón debe tener Causas de validación="false". Eso funcionó para mí.

Estaba buscando una solución para esto :)

parece que no puede tener OkControlID asignado a un control si desea que ese control active un evento, simplemente quitando esta propiedad, tengo todo funcionando nuevamente.

mi código (funcionando):

<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" />&nbsp;
        <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" />

Poner en el control de botones el atributo " UseSubmitBehavior = false " ;.

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>   

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 otros han mencionado)
2. Si está utilizando validadores de campo, debe agregar CausesValidation = & Quot; false & Quot; en el botón.

Ambos escenarios se comportaron de la misma manera para mí.

He encontrado una manera de validar una ventana emergente modal sin devolución de datos.

En ModalPopupExtender configuré el OnOkScript en una función, por ejemplo, ValidateBeforePostBack (), luego en la función llamo a Page_ClientValidate para el grupo de validación que quiero, haga una comprobación y, si falla, mantengo la ventana emergente modal. Si pasa, llamo a __doPostBack.

function ValidateBeforePostBack(){ 
     Page_ClientValidate('MyValidationGroupName'); 
     if (Page_IsValid) { __doPostBack('',''); } 
     else { $find('mpeBehaviourID').show(); } 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top