如何让一个占位符中的链接在不同占位符中打开 ModalPopup?
-
23-08-2019 - |
题
我有一个包含不同占位符的页面。在其中一个中,我有一个链接,我想在第二个占位符中打开模式弹出窗口(使用 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”
但如果这不起作用,您仍然有一些选择,在使用下面的方法之前,我已经触发了位于不同更新面板中的模式。虽然不是完全相同的问题,但此解决方法可能会对您有所帮助(我假设您的页面上有脚本管理器)。
- 在 Content2 中创建一个 ID=“hiddenLink” 的隐藏元素
- 设置您的 ModalExtender PopupControlID="hiddenLink"
在 content1 中“link”的 codeBehind 中,添加一个 onClick 事件,其中包含以下内容
ModalPopup1.show()
如果您使用 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 页面执行回发。