ModalPopupExtender OKボタンクリックイベントが発生しませんか?
-
02-07-2019 - |
質問
UpdatePanel内にボタンがあります。このボタンは、ModalPopupExtenderの[OK]ボタンとして使用されています。何らかの理由で、ボタンクリックイベントが発生していません。何か案は?何か不足していますか?
<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として設定しないでください。
他のヒント
ModalPopupExtenderの[OK]または[キャンセル]ボタンとして使用されるボタンには、クリックイベントを設定できないようです。
を削除してテストしましたOkControlID="ModalOKButton"
ModalPopupExtenderタグから、ボタンのクリックが発生します。サーバーにデータを送信する別の方法を見つける必要があります。
ボタンに CausesValidation = <!> quot; false <!> quot;が必要な場合もあります。
このためのソリューションを探していました:)
コントロールにイベントを発生させたい場合、 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" />
ボタンに属性を入力します<!> quot; UseSubmitBehavior = false <!> quot;。
これまでの回答のどれもうまくいきませんでした。 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="" />
クリックイベントが発生しない原因は2つあります:
1. OKControlIDを削除する必要があります(他の人が述べたように)
2.フィールドバリデータを使用している場合は、CausesValidation = <!> quot; false <!> quot;を追加する必要があります。ボタンの上。
両方のシナリオは私にとって同じように振る舞いました。
ポストバックなしでmodalpopupを検証する方法を見つけました。
ModalPopupExtenderでOnOkScriptを関数(ValidateBeforePostBack()など)に設定し、関数で必要な検証グループのPage_ClientValidateを呼び出してチェックを行い、失敗した場合はmodalpopupを表示したままにします。合格した場合、__doPostBack
を呼び出します。
function ValidateBeforePostBack(){
Page_ClientValidate('MyValidationGroupName');
if (Page_IsValid) { __doPostBack('',''); }
else { $find('mpeBehaviourID').show(); }
}