0

我有一个包含不同占位符的页面。在其中一个中,我有一个链接,我想在第二个占位符中打开一个模式弹出窗口(使用 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在后面的代码中找到一些东西,但我不太喜欢使用这个函数,因为它在计算上非常昂贵(尤其是在我的嵌套布局中)。

4

1 回答 1

1

一个问题是您的 TargetControlID 和 PopupControlID 是相反的。TargetControlID 是您想要“模态弹出”的项目的 ID,在您的情况下是 Panel1。PopupControlID 是将触发 ModalPopup 的控件的 ID,在您的情况下为“链接”

但是,如果这不起作用,您仍然有一些选择,在使用下面的方法之前,我已经触发了位于不同更新面板中的模式。虽然不是完全相同的问题,但此解决方法可能会对您有所帮助(我假设您的页面上有一个脚本管理器)。

  1. 在 Content2 中创建一个 ID="hiddenLink" 的隐藏元素
  2. 设置您的 ModalExtender PopupControlID="hiddenLink"
  3. 在 content1 中“链接”的 codeBehind 中,添加一个 onClick 事件,内容如下

    ModalPopup1.show()

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

方法 2,您也可以使用 javascript 函数向 Modal 显示。在您的 Modalpopup 定义中添加一个 behaviorID="MyModal1" (或任何您想调用的名称)。然后更改您的链接:

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

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

于 2009-07-14T11:53:28.187 回答