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>
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.
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.
Il se peut également que le bouton doive avoir CausesValidation = "false". Cela a fonctionné pour moi.
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" />
<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" />
Mettez dans le Button-Control l'attribut "UseSubmitBehavior = false".
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.
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>
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(); }
}