Domanda

Ho un pulsante all'interno di UpdatePanel. Il pulsante viene utilizzato come pulsante OK per un ModalPopupExtender. Per qualche motivo, l'evento clic sul pulsante non si attiva. Qualche idea? Mi sto perdendo qualcosa?

<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>
È stato utile?

Soluzione

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
    }

E non impostare il pulsante OK come OkControlID.

Altri suggerimenti

Sembra che un pulsante utilizzato come pulsante OK o CANCEL per un ModalPopupExtender non possa avere un evento click. L'ho provato rimuovendo

OkControlID="ModalOKButton"

dal tag ModalPopupExtender e il pulsante si attiva. Dovrò trovare un altro modo per inviare i dati al server.

Potrebbe anche essere che il pulsante deve avere CausesValidation="false". che ha funzionato per me.

Stavo solo cercando una soluzione per questo :)

sembra che non si possa assegnare OkControlID a un controllo se si desidera che quel controllo attivi un evento, semplicemente rimuovendo questa proprietà ho ripristinato tutto.

il mio codice (funzionante):

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

Metti nel Button-Control l'attributo " UseSubmitBehavior = false " ;.

Nessuna delle risposte precedenti ha funzionato per me. Ho chiamato il postback del pulsante sull'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>   

Uso spesso un'etichetta vuota come TargetControlID. ex. <asp:Label ID="lblghost" runat="server" Text="" />

Ho visto due cose che non fanno scattare l'evento click:
1. devi rimuovere OKControlID (come altri hanno già detto)
2. Se si utilizzano i validatori di campo, è necessario aggiungere CauseValidation = & Quot; false & Quot; sul pulsante.

Entrambi gli scenari si sono comportati allo stesso modo per me.

Ho trovato il modo di convalidare un modalpopup senza postback.

In ModalPopupExtender ho impostato OnOkScript su una funzione, ad esempio ValidateBeforePostBack (), quindi nella funzione chiamo Page_ClientValidate per il gruppo di convalida che desidero, eseguo un controllo e se fallisce, mantieni visualizzato modalpopup. Se passa, chiamo __doPostBack.

function ValidateBeforePostBack(){ 
     Page_ClientValidate('MyValidationGroupName'); 
     if (Page_IsValid) { __doPostBack('',''); } 
     else { $find('mpeBehaviourID').show(); } 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top