我有一个包含不同占位符的页面。在其中一个中,我有一个链接,我想在第二个占位符中打开模式弹出窗口(使用 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 在后面的代码中,但我真的不喜欢使用这个函数,因为它的计算成本相当高(特别是对于我的嵌套布局)。

有帮助吗?

解决方案

一个问题是您的 TargetControlID 和 PopupControlID 颠倒了。TargetControlID 是您想要“模态弹出”的项目的 ID,在您的情况下为 Panel1。PopupControlID 是触发 ModalPopup 的控件的 ID,在您的情况下为“Link”

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

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

    ModalPopup1.show()

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

方法2,您也可以使用javascript函数来显示到Modal。将behaviorID =“MyModal1”(或任何您想要的名称)添加到您的 Modalpopup 定义中。然后更改您的链接:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top