2010-07-22 7 views
7

¿Cómo puedo cargar un control sin una Página?Uso de LoadControl sin una Página

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" /> 
+0

I tiene 'HttpContext.Current' si eso es útil de alguna manera ... – BrunoLM

+0

¿Le importa si pregunto cuál es el propósito de esto? ¿Has considerado un enfoque diferente? –

+0

Tengo que cargar todos los controles desde un ASCX. Mi código funciona cuando el objeto de página existe. Pero en este caso mi control está en un contexto donde no hay una página, y por alguna razón no funciona. (Es el modo de edición de Sitefinity de Telerik). Mi código usa BuilderManager para crear una instancia a partir de una ruta virtual, tal vez si la cargo de otra manera puede funcionar ... – BrunoLM

Respuesta

12

Usted puede conseguir su página-Objeto de HttpContext de esta manera:

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

¿Es posible utilizar este método, pero desde el archivo global.asax en Application_Start? No creo que global arroje a una página. – Corgalore

+0

¿Por qué necesita una instancia de página en Application_Start, lo que se llama solo una vez en la vida útil de una aplicación? –

+0

Estaba intentando cargar UserControls al inicio de la aplicación y ejecutar su código. Fue un mecanismo de pseudo complemento. – Corgalore

-1

LoadControl no es un método de página, es un método de la clase de control.

Usted sólo puede usar LoadControl() en su control en lugar de Page.LoadControl()

+1

LoadControl se define en la clase TemplateControl. Está disponible para las clases Page y UserControl, pero no para Control (o CompositeControl). – AaronSieb

3

Siempre se puede crear una nueva instancia de una página si no tiene uno:

(Page ?? new Page()).LoadControl(...) 
Cuestiones relacionadas