我在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>
有帮助吗?

解决方案

.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或CANCEL按钮的按钮不能有click事件。我通过删除

测试了这个
OkControlID="ModalOKButton"
从ModalPopupExtender标记

,然后点击按钮。我需要找出另一种将数据发送到服务器的方法。

也可能是按钮需要 CausesValidation = <!>“; false <!>”。 这对我有用。

我只是在寻找解决方案:)

如果您希望该控件触发某个事件,您似乎无法将 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" />&nbsp;
        <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" />

将Button-Control放入属性<!>“; 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="" />

我看到两件事导致点击事件没有发生:
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(); } 
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top