ModalPopupExtender Bouton OK cliquez sur l'événement pas de tir?
j'ai un Bouton à l'intérieur d'un UpdatePanel. Le bouton est utilisé comme le bouton OK pour un ModalPopupExtender. Pour une raison quelconque, l'événement de clic de bouton ne démarre pas. Des idées? Ai-je raté 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>
8 réponses
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 positionnez pas le bouton OK comme OkControlID.
il semble qu'un bouton qui est utilisé comme bouton OK ou CANCEL pour un ModalPopupExtender ne peut pas avoir un événement de clic. J'ai testé en supprimant l'
OkControlID="ModalOKButton"
à partir de la ModalPopupExtender tag, et cliquez sur le bouton des feux. Je dois trouver un autre moyen d'envoyer les données au serveur.
Il se pourrait aussi que le bouton doit avoir CausesValidation= "false". Qui a fonctionné pour moi.
je viens chercher une solution pour cela :)
il semble que vous ne pouvez pas avoir OkControlID assignez à un contrôle si vous voulez que le contrôle déclenche un événement, en enlevant simplement cette propriété j'ai tout fonctionne à nouveau.
mon code (de 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" />
<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" />
mettre dans le bouton-Contrôler L'attribut "UseSubmitBehavior=false".
j'utilise souvent une étiquette vierge comme la TargetControlID. ex. <asp:Label ID="lblghost" runat="server" Text="" />
j'ai vu deux choses qui causent l'événement click déclenche pas:
1. vous devez supprimer les 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 façon pour moi.
Aucune des réponses précédentes a fonctionné pour moi. J'ai appelé le postback 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 une publication.
dans le ModalPopupExtender j'ai mis le OnOkScript à une fonction E. G ValidateBeforePostBack (), puis dans la fonction que j'appelle Page_ClientValidate pour le groupe de validation que je veux, faites une vérification et si elle échoue, gardez l'affichage modalpopup. Si ça passe, j'appelle __doPostBack
.
function ValidateBeforePostBack(){
Page_ClientValidate('MyValidationGroupName');
if (Page_IsValid) { __doPostBack('',''); }
else { $find('mpeBehaviourID').show(); }
}