44 votes

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

J'ai un bouton à l'intérieur d'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. Une idée ? Ai-je oublié 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>

53voto

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 comme OkControlID.

10voto

Kyle Trauberman Points 16049

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

OkControlID="ModalOKButton"

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

8voto

Johan Leino Points 2533

Il se peut également que le bouton ait besoin d'avoir CausesValidation="false". Cela a fonctionné pour moi.

1 votes

OMG, ça a marché. Mon problème n'avait rien à voir avec le bouton OK, mais le bon vieux clic sur le bouton ne se soumettait pas.

0 votes

Qu'en est-il lorsque CausesValidation doit être "true" ? Le fait de lui attribuer la valeur "false" résout un problème, mais en entraîne un autre...

0 votes

Cela a fonctionné pour moi, après avoir mis à jour mon application de .NET 2.0 à .NET 4.5, mon bouton a cessé de fonctionner. Mais avec CausesValidation="false" il fonctionne à nouveau. Nous vous remercions de votre attention.

6voto

balexandre Points 36115

Je cherchais justement une solution à ce problème :)

il semble que vous ne puissiez pas avoir OkControlID assigner à un contrôle si vous voulez que ce contrôle déclenche un événement, il suffit de supprimer cette propriété pour que tout fonctionne à nouveau.

mon code (qui fonctionne) :

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

5voto

Stefan Weiss Points 11

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X