2008-09-27 15 views
42

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?ModalPopupExtender Botón Aceptar, haga clic en evento que no se activa?

<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> 

Respuesta

52

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 establezca el botón Aceptar como OkControlID.

+1

Tu es la respuesta correcta. – aceinthehole

9

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

OkControlID="ModalOKButton" 

de la etiqueta ModalPopupExtender, y el botón hace clic en se dispara. Tendré que encontrar otra forma de enviar los datos al servidor.

6

Sólo estaba buscando una solución para esto :)

parece que no se puede tener OkControlID asignar a un control si desea que los incendios de control de un evento, sólo la eliminación de esta propiedad llegué todo funciona de nuevo.

mi código (de trabajo):

<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" /> 
2

Ninguna de las respuestas anteriores trabajó 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> 
+0

Si elimina OKControlID de su ModalPopupExtender, el botón se devolverá como normalmente. En su caso, puede llamar a ModalPopupExtender.Hide() para ocultar la ventana emergente. –

7

También podría ser que el botón tiene que tener CausesValidation = "falso". Eso funcionó para mí.

+1

OMG, eso funcionó. Mi problema no tenía nada que ver con el botón Aceptar, pero el botón antiguo normal no se enviaba. – DOK

+0

Entonces, ¿qué sucede cuando CausesValidation necesita ser "verdadero"? Establecerlo en "falso" resuelve un problema pero causa otro ... –

+0

Esto funcionó para mí ... pero ¿por qué? – user1003916

4

Puesto en el botón-Control del atributo "UseSubmitBehavior = false".

3

A menudo uso una etiqueta en blanco como TargetControlID. ex. <asp:Label ID="lblghost" runat="server" Text="" />

que he visto dos cosas que causan el evento click se dispara:
1. usted tiene que quitar la OKControlID (como han mencionado otros)
2. Si está utilizando los validadores de campo se debe añadir CausesValidation = "falso" en el botón.

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

1

He encontrado una forma de validar un modalpopup sin una devolución de datos.

En el ModalPopupExtender que establezca la OnOkScript a una función por ejemplo ValidateBeforePostBack(), y luego en la función que llamo Page_ClientValidate para el grupo de validación que quiero, hago un cheque y si no funciona, mantenga la proyección ModalPopup. Si pasa, llamo al __doPostBack.

function ValidateBeforePostBack(){ 
    Page_ClientValidate('MyValidationGroupName'); 
    if (Page_IsValid) { __doPostBack('',''); } 
    else { $find('mpeBehaviourID').show(); } 
} 

Espero que esto ayude.

Cuestiones relacionadas