Событие нажатия кнопки ModalPopupExtender OK не срабатывает?
-
02-07-2019 - |
Вопрос
У меня есть кнопка внутри панели обновления.Кнопка используется в качестве кнопки OK для ModalPopupExtender.По какой-то причине событие нажатия кнопки не запускается.Есть какие-нибудь идеи?Я что-то упускаю?
<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
}
И не устанавливайте кнопку OK в качестве OkControlID.
Другие советы
Похоже, что кнопка, которая используется в качестве кнопки OK или CANCEL для ModalPopupExtender, не может иметь события click.Я проверил это, удалив
OkControlID="ModalOKButton"
из тега ModalPopupExtender, и срабатывает щелчок по кнопке.Мне нужно будет придумать другой способ отправки данных на сервер.
Также может быть, что кнопка должна иметь CausesValidation="ложь". У меня это сработало.
Я просто искал решение для этого :)
похоже, что вы не можете иметь OkControlID назначьте элементу управления, если вы хотите, чтобы этот элемент управления запускал событие, просто удалив это свойство, я снова заставил все работать.
мой код (рабочий):
<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" />
Поместите в Кнопку-Регулятор атрибут "UseSubmitBehavior=false".
Ни один из предыдущих ответов не сработал для меня.Я вызвал обратную отправку кнопки в событии 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>
Я часто использую пустую метку в качестве TargetControlID.бывший. <asp:Label ID="lblghost" runat="server" Text="" />
Я видел две вещи, из-за которых событие click не срабатывает:
1.вы должны удалить OKControlID (как упоминали другие)
2.Если вы используете средства проверки полей, вам следует добавить CausesValidation="false" на кнопке.
Оба сценария вели себя для меня одинаково.
Я нашел способ проверить modalpopup без обратной отправки.
В ModalPopupExtender я устанавливаю OnOkScript в функцию, например ValidateBeforePostBack(), затем в функции я вызываю Page_ClientValidate для нужной мне группы проверки, выполняю проверку и, если это не удается, сохраняю отображение modalpopup.Если это пройдет, я позвоню __doPostBack
.
function ValidateBeforePostBack(){
Page_ClientValidate('MyValidationGroupName');
if (Page_IsValid) { __doPostBack('',''); }
else { $find('mpeBehaviourID').show(); }
}