如何在一个占位符中创建一个链接在另一个占位符中打开一个ModalPopup?

时间:2009-07-06 08:07:24

标签: asp.net modalpopupextender contentplaceholder

我有一个包含不同占位符的页面。在其中一个中,我有一个链接,我想在第二个占位符中打开一个模态弹出窗口(使用ajaxtoolkit ModalPopupExtender):

<asp:Content ID="content1" ContentPlaceHolderID="placeholder1" Runat="Server">
   <asp:LinkButton ID="link" runat="server" Text="Popup link" />
</asp:Content>

<asp:Content ID="content2" ContentPlaceHolderID="placeholder2" Runat="Server">
   <asp:Panel ID="panel" runat="server" Text="Popup content" />
   <ajaxToolkit:ModalPopupExtender ID="popup" runat="sever"
      TargetControlID="link"
      PopupControlID="panel"
      />
</asp:Content>

当执行上述操作时,它会向我发出异常,说popup找不到link(我明白这一点,因为它们位于两个不同的占位符中)。

我该如何使这项工作?我可以在后面的代码中想到找到FindControl的东西,但我真的不想使用这个函数,因为它的计算成本非常高(特别是我的嵌套布局)。

1 个答案:

答案 0 :(得分:1)

一个问题是您的TargetControlID和PopupControlIDs是相反的。 TargetControlID是您想要“Modal Pop”的项目的ID,在您的情况下是Panel1。 PopupControlID是触发ModalPopup的控件的ID,在您的情况下将是“Link”

但是如果不起作用你还有一些选项,我在使用下面的方法之前已经在另一个更新面板中发射了一个模态。虽然不是完全相同的问题,但这种解决方法可能对您有帮助(我假设您的页面上有脚本管理器)。

  1. 在Content2中创建一个ID =“hiddenLink”
  2. 的隐藏元素
  3. 设置ModalExtender PopupControlID =“hiddenLink”
  4. 在content1的“link”的codeBehind中,添加带有以下内容的onClick事件

    ModalPopup1.show()

  5. 如果您正在使用updatePanels,这将导致ModalPopup以AJAX方式显示而不刷新页面。但是您仍然可以在客户端和服务器之间获得完整的数据回传。

  6. 方法2,您也可以使用javascript函数向Modal显示。将一个behaviorID =“MyModal1”(或任何你想要调用它)添加到Modalpopup定义中。然后更改链接:

    <asp:LinkButton ID="link" runat="server" Text="Popup link" OnClientClick="$get('MyModal1').show(); return false;"/>
    

    注意:上例中的return false会阻止.NET页面执行回发。