C# 使用没有页面的LoadControl

C# 使用没有页面的LoadControl,c#,asp.net,C#,Asp.net,如何在没有页面的情况下加载控件 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

如何在没有页面的情况下加载控件

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获取页面对象:

Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
     // Use page instance to load your Usercontrol
}

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


您可以在控件中使用LoadControl()而不是Page。LoadControl()

如果您没有页面实例,则始终可以创建页面的新实例:

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

我有
HttpContext.Current
如果这有什么用处……你介意我问一下这是为了什么吗?你考虑过不同的方法吗?我必须从ASCX加载所有控件。我的代码在页面对象存在时工作。但在本例中,我的控件处于一个没有页面的上下文中,并且由于某种原因它无法工作。(这是Telerik的Sitefinity的编辑模式)。我的代码使用BuilderManager从虚拟路径创建实例,如果我以其他方式加载它,它可能会工作……LoadControl在TemplateControl类中定义。它可用于Page和UserControl类,但不可用于Control(或CompositeControl)。是否可以使用此方法,但可以从Application_Start中的global.asax文件使用?我不相信global会强制转换到一个页面。为什么你需要在应用程序启动时调用一个页面实例,在应用程序生命周期中只调用一次?我试图在应用程序启动时加载UserControls并执行它们的代码。这是一个伪插件机制。