我在UpdatePanel中有一个Button。该按钮用作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>
答案 0 :(得分:53)
.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。
答案 1 :(得分:9)
看起来用作ModalPopupExtender的OK或CANCEL按钮的按钮不能有click事件。我通过删除
测试了这个OkControlID="ModalOKButton"
从ModalPopupExtender标记,然后点击按钮。我需要找出另一种将数据发送到服务器的方法。
答案 2 :(得分:8)
也可能是按钮需要 CausesValidation =“false”。 这对我有用。
答案 3 :(得分:6)
我只是在寻找解决方案:)
如果您希望该控件触发某个事件,您似乎无法将 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" />
答案 4 :(得分:4)
将Button-Control属性设置为“UseSubmitBehavior = false”。
答案 5 :(得分:2)
以前的答案都不适合我。我在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>
答案 6 :(得分:2)
我经常使用空白标签作为TargetControlID。恩。 <asp:Label ID="lblghost" runat="server" Text="" />
我已经看到两件导致点击事件不发生的事情:
1.你必须删除OKControlID(正如其他人提到的)
2.如果您使用的是字段验证器,则应在按钮上添加CausesValidation =“false”。
这两种情况对我来说都是一样的。
答案 7 :(得分:1)
我找到了一种在没有回发的情况下验证modalpopup的方法。
在ModalPopupExtender中,我将OnOkScript设置为一个函数,例如ValidateBeforePostBack(),然后在函数中我调用Page_ClientValidate作为我想要的验证组,进行检查,如果失败,则保持modalpopup显示。如果通过,我拨打__doPostBack
。
function ValidateBeforePostBack(){
Page_ClientValidate('MyValidationGroupName');
if (Page_IsValid) { __doPostBack('',''); }
else { $find('mpeBehaviourID').show(); }
}