web-dev-qa-db-fra.com

ModalPopupExtender OK L'événement de clic du bouton ne se déclenche pas?

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 de bouton ne se déclenche pas. Des idées? Suis-je en train de manquer quelque chose?

<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>
43
Kyle Trauberman

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 définissez pas le bouton OK sur OkControlID.

53
Michał Ziomek

Il semble qu'un bouton utilisé comme bouton OK ou CANCEL pour un ModalPopupExtender ne peut pas avoir d'événement de clic. J'ai testé cela en supprimant le

OkControlID="ModalOKButton"

à partir de la balise ModalPopupExtender, et le bouton clique sur se déclenche. Je vais devoir trouver une autre façon d'envoyer les données au serveur.

9
Kyle Trauberman

Il se peut également que le bouton doive avoir CausesValidation = "false". Cela a fonctionné pour moi.

8
Johan Leino

Je cherchais juste une solution pour ça :)

il semble que vous ne pouvez pas avoir OkControlID assigné à un contrôle si vous voulez que ce contrôle déclenche un événement, en supprimant simplement cette propriété, j'ai tout fait fonctionner à nouveau.

mon code (en fonctionnement):

<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" />
6
balexandre

Mettez dans le Button-Control l'attribut "UseSubmitBehavior = false".

4
Stefan Weiss

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

J'ai vu deux choses qui font que l'événement click ne se déclenche pas:
1. vous devez supprimer le OKControlID (comme d'autres l'ont mentionné)
2. Si vous utilisez des validateurs de champ, vous devez ajouter CausesValidation = "false" sur le bouton.

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

2
user519205

Aucune des réponses précédentes n'a fonctionné 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>   
2
Johnno Nolan

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▶ClientValidate pour le groupe de validation que je veux, faites une vérification et s'il échoue, gardez le modalpopup affiché. Si ça passe, j'appelle __doPostBack.

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