2008-09-27 9 views
42

J'ai un bouton dans un UpdatePanel. Le bouton est utilisé comme bouton OK pour un ModalPopupExtender. Pour une raison quelconque, l'événement de clic sur le bouton ne se déclenche pas. Des idées? Est-ce que je manque quelque chose?ModalPopupExtender OK L'événement de clic de bouton ne se déclenche pas?

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

Répondre

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 
    } 

Et ne réglez pas le bouton OK comme OkControlID.

+1

C'est la bonne réponse. – aceinthehole

9

Il semble qu'un bouton qui est utilisé comme le bouton OK ou Annuler pour une ModalPopupExtender ne peut pas avoir un événement de clic. Je l'ai testé ceci en retirant le

OkControlID="ModalOKButton" 

de la balise ModalPopupExtender, et les feux de clic de bouton. Je vais devoir trouver un autre moyen d'envoyer les données au serveur.

6

Je ne faisais que la recherche d'une solution pour cette :)

il semble que vous ne pouvez pas avoir OkControlID attribuons à un contrôle si vous voulez que le contrôle déclenche un événement, juste suppression de cette propriété, je suis tout fonctionne à nouveau.

mon code (travail):

<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

Aucune des réponses précédentes a travaillé pour moi. J'ai appelé la publication du bouton sur l'événement 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 vous supprimez OKControlID de votre ModalPopupExtender, le bouton sera considéré comme normal. Dans votre événement, vous pouvez appeler ModalPopupExtender.Hide() pour masquer la fenêtre contextuelle. –

7

Il se pourrait aussi que le bouton doit avoir CausesValidation = "false". Ça a marché pour moi.

+1

OMG, cela a fonctionné. Mon problème n'avait rien à voir avec le bouton OK, mais l'ancien clic du bouton habituel ne se faisait pas. – DOK

+0

Alors, que diriez-vous lorsque CausesValidation doit être "true"? Le mettre à "faux" résout un problème mais en provoque un autre ... –

+0

Cela a fonctionné pour moi ... mais pourquoi? – user1003916

4

Mettez dans le contrôle de bouton l'attribut "UseSubmitBehavior = false".

3

J'utilise souvent une étiquette vierge comme TargetControlID. ex. <asp:Label ID="lblghost" runat="server" Text="" />

Je l'ai vu deux choses qui provoquent l'événement click pas le feu:
1. vous devez retirer le OKControlID (comme d'autres l'ont mentionné)
2. Si vous utilisez champ validateurs devez ajouter CausesValidation = "false" sur le bouton.

Les deux scénarios se sont comportés de la même manière pour moi.

1

J'ai trouvé un moyen de valider un modalpopup sans publication.

Dans ModalPopupExtender, j'ai défini l'OnOkScript sur une fonction, par exemple ValidateBeforePostBack(), puis dans la fonction que j'appelle Page_ClientValidate pour le groupe de validation voulu, effectuez une vérification et, en cas d'échec, maintenez l'affichage modalpopup. Si ça passe, j'appelle __doPostBack.

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

Espérons que cela aide.

Questions connexes