我有 3 种不同类型的 ajax 弹出窗口需要存在于我的站点中。我希望我可以简单地为每个控件创建一个用户控件,并将面板和模式弹出扩展器放置在每个控件中,但这似乎不起作用。以前有没有人尝试过这个,或者你有没有关于如何避免不同页面上每个弹出窗口的重复代码的建议?谢谢!
3 回答
一种选择是将弹出窗口写入 asp.net 用户控件(.ascx 页面)并将其包含在您需要弹出窗口的页面上。在 ascx 页面中有一个公共方法将显示弹出窗口,并在需要时从父页面调用它。如果您在父页面上已经有一个脚本管理器,那么您不能在 ascx 页面中有第二个,但除此之外,不应该有任何东西可以阻止它工作。希望这可以帮助!
编辑:这是我的模态弹出扩展器控件的样子......
<cc1:ModalPopupExtender
ID="mpeClassroom"
BackgroundCssCLass="modalBackground"
runat="server"
CancelControlID="lbClose"
OnOkScript="onOk()"
TargetControlID="Button1"
PopupControlID="pnlClassroom">
</cc1:ModalPopupExtender>
在我的页面后面的代码中,我的方法只是调用 mpeClassroom.Show();
啊,我发现了我相信的用户控件的问题。
ModalPopUpExtender 需要设置 TargetID 属性,否则会发生错误。由于它位于 UserControl 中,因此我刚刚创建了一个不执行任何操作的虚拟链接按钮,并将可见属性设置为 false。
<asp:LinkButton ID="lnkBlank" runat="server" Visible="false" />
<asp:Panel ID="plContainer" style="display: none;" runat="server">
Hello?
</asp:Panel>
<cc1:ModalPopupExtender ID="mpe" runat="server"
BehaviorID="test"
TargetControlID="lnkBlank"
PopupControlID="plContainer" />
显然它不明白这一点,当我将 visible 属性设置为 true 时,它就开始工作了。不确定 TargetID 的原因是什么,因为我认为大多数弹出窗口都可以从页面的多个链接中调用。也许我仍然不完全清楚应该如何使用这个控件。
隐藏链接作为 TrgetControlID 的问题是;当您将其可见性设置为 false 时,服务器也不会呈现它。然后 PopExtender 在页面上找不到控件。
不要将其可见性设置为 false,而是尝试应用带有 display:none 的样式。这应该工作!