如何设置一个方法,在单击按钮时隐藏ModalPopupExtender?

时间:2014-07-21 21:52:26

标签: c# asp.net .net ajaxcontroltoolkit

我有modal

<asp:ModalPopupExtender runat="server" ID="popUp" TargetControlID="btn1" PopupControlID="pnlP" BackgroundCssClass="modalBackground" DropShadow="true" />

使用此updatePanel

<asp:UpdatePanel ID="pnlP" runat="server" Width="600" Height="650">
    <ContentTemplate>
        <asp:Label Text="Hola" runat="server" />
        <asp:Button ID="btnCerrarPopUp" runat="server" OnClick="ocultarModal" Text="Adios!" />
    </ContentTemplate>
</asp:UpdatePanel>

我想要做的是创建一个 unic方法,当单击ModalPopupExtender显示的面板内的按钮时隐藏ModalPopupExtender ,所以如果我有“N”ModalPopupExtender带有隐藏它的按钮我将始终使用相同的方法,无论哪个ModalPopupExtender - &gt;面板 - &gt;单击按钮。

如何识别应隐藏哪个ModalPopupExtender

protected void ocultarModal(Object sender, EventArgs e)
{
    // Identify which ModalPopupExtender should hide
    // thatModal.Hide();
}

请记住,我有很多ModalPopupExtender显示panel button,{{1}}必须调用相同方法隐藏ModalPopupExtender 。< / p>

请帮助。

2 个答案:

答案 0 :(得分:1)

不使用OnClick,而是使用OnCommand,将模态标识符作为命令参数传递。然后,在Code-Behind中,从OnCommand事件中检索参数并使用适当的ModalPopupExtender关闭模式。以下是一个例子:

<asp:ModalPopupExtender runat="server" ID="popUp1" TargetControlID="btn1" PopupControlID="pnlP" BackgroundCssClass="modalBackground" DropShadow="true" />


<asp:UpdatePanel ID="pnlP" runat="server" Width="600" Height="650">
    <ContentTemplate>
        <asp:Label Text="Hola" runat="server" />
        <asp:Button ID="btnCerrarPopUp" runat="server" OnCommand="ocultarModalCommand" CommandArgument="popUp1" Text="Adios!" />
    </ContentTemplate>
</asp:UpdatePanel>

您可以在上面看到Modal 1的模式弹出扩展器和更新面板。这里使用的不是OnClick,而是使用OnCommand,并且作为其CommandArgumkent,设置了模态弹出扩展器的ID:&#34; popUp1& #34;

怎么样,看看下面的听众:

protected void ocultarModalCommand(Object sender, CommandEventArgs e)
{
    // Identify which ModalPopupExtender should hide
    String extenderId = (String) e.CommandArgument;
    // hide popup 1
    if (extenderId.equals("popUp1") {
        popUp1.Hide();
    } else if (extender.equals("popUp2") {
        // hide popup2
    }
    // check all other modals

}

在命令侦听器上方获取扩展程序的名称,该名称在命令参数中设置。基于此,它知道要关闭哪个模态。

此外,你可以用听众做一些更好的事情,比如下面的代码:

protected void ocultarModalCommand(Object sender, CommandEventArgs e)
{
    // Identify which ModalPopupExtender should hide
    String extenderId = (String) e.CommandArgument;
    // get the control based on its id
    ModalPopupExtender extender = (MOdalPopupExtender) FindControl(extenderId);
    if (extender != null)
    {
        extender.Hide();
    }
}

在上面的代码中,您可以根据Command Argument中设置的Id找到扩展器。但是,如果错误地设置了Id,则将返回null并且不会隐藏任何内容。该代码具有比前一代码小得多的巨大优势。

你有它,一个可以关闭所有模态的事件。

答案 1 :(得分:1)

考虑使用JavaScript。弹出元素以_foregroundElement后缀结束,因此您可以使用jQuery轻松获取它(以ID选择器结尾,作为按钮的父元素)。

然后,剥离_foregroundElement部分并使用$find(theRemainingPartOfTheString)

对此,您可以引用控件的客户端对象,无论其实际ID或是否为。

然后,调用其hide()方法,您就完成了。删除回发也会使您的页面更快:)。