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并执行它们的代码。这是一个伪插件机制。