在没有页面的情况下使用LoadControl

8
我该如何在没有页面的情况下加载控件?
public void Something()
{
    var ascx = /*LoadControl*/("my.ascx"); // being Page = null
    var ctl1 = ascx.Controls[0];
    var ctl2 = ascx.Controls[1];
}

my.ascx:

<%@ Control Language="C#" %>
<asp:Literal ID="ctl1" runat="server" />
<asp:Label ID="ctl2" runat="server" />

如果有用的话,我确实有HttpContext.Current... - BrunoLM
你介意我问一下这是什么目的吗?你考虑过其他方法吗? - Kyle B.
我必须从ASCX加载所有控件。当页面对象存在时,我的代码可以正常工作。但在这种情况下,我的控件处于没有页面的上下文中,因此出现了某些问题(这是Telerik's Sitefinity的编辑模式)。我的代码使用BuilderManager从虚拟路径创建实例,也许如果我以其他方式加载它,它可能会起作用... - BrunoLM
3个回答

14
您可以通过以下方式从HttpContext获取您的页面对象(Page-Object):
Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
     // Use page instance to load your Usercontrol
}

能否在Application_Start中使用此方法?我不认为global会转换为Page。 - Corgalore
为什么在Application_Start中需要一个页面实例,它只在应用程序生命周期中被调用一次? - Tim Schmelter
我试图在应用程序启动时加载UserControls并执行它们的代码。 这是一种伪插件机制。 - Corgalore

3

如果您没有页面实例,您可以随时创建一个新的实例:

(Page ?? new Page()).LoadControl(...)

-1

LoadControl不是Page的方法,而是Control类的方法。

在您的控件中,您可以直接使用LoadControl(),而不是Page.LoadControl()。


1
LoadControl被定义在TemplateControl类中。它可以在Page和UserControl类中使用,但不能在Control(或CompositeControl)中使用。 - AaronSieb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接