我有一个包含不同占位符的页面。在其中一个中,我有一个链接,我想在第二个占位符中打开一个模态弹出窗口(使用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
的东西,但我真的不想使用这个函数,因为它的计算成本非常高(特别是我的嵌套布局)。
答案 0 :(得分:1)
一个问题是您的TargetControlID和PopupControlIDs是相反的。 TargetControlID是您想要“Modal Pop”的项目的ID,在您的情况下是Panel1。 PopupControlID是触发ModalPopup的控件的ID,在您的情况下将是“Link”
但是如果不起作用你还有一些选项,我在使用下面的方法之前已经在另一个更新面板中发射了一个模态。虽然不是完全相同的问题,但这种解决方法可能对您有帮助(我假设您的页面上有脚本管理器)。
在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页面执行回发。