2011-12-04 17 views
9

He creado un control de usuario.Cargue el control de usuario dinámicamente con los parámetros

public partial class Controls_pageGeneral : System.Web.UI.UserControl 
{ 

    private int pageId; 
    private int itemIndex; 

    public int PageId 
    { 
     get { return pageId; } 
     set { pageId = value; } 
    } 

    public int ItemIndex 
    { 
     get { return itemIndex; } 
     set { itemIndex = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // something very cool happens here, according to the values of pageId and itemIndex 
    } 

} 

Ahora quiero dinámicamente crear este control y pasarle parámetros. He intentado usar la función LoadControl pero solo tiene dos construcciones: una con cadena (ruta) y otra con Tipo t y una matriz de parámetros.

El primer método funciona, pero debido a mis parámetros y tengo que usar el método más complicado de LoadControl, pero no sé cómo usarlo. ¿Cómo puedo encajar mi cadena de ruta de mi Control a ese extraño objeto Tipo t?

Gracias por su ayuda.

Respuesta

10

En su caso no es relevante, ya que el segundo método acepta parámetros pasados ​​al constructor adecuado, pero no tiene el constructor bajo su control.

sólo tiene que cargar el control utilizando la ruta del archivo .ascx, pasarlo al tipo adecuado y establezca las propiedades de uno en uno:

Controls_pageGeneral myControl = (Controls_pageGeneral)Page.LoadControl("path here"); 
myControl.PageId = 1; 
myControl.ItemIndex = 2; 

Si usted insiste en el uso de constructor, primero añada tales:

public Controls_pageGeneral(int pageId, int itemIndex) 
{ 
    //code here.. 
} 

Y luego:

Page.LoadControl(typeof(Controls_pageGeneral), new object[] {1, 2}); 

hará el mismo que el abov e como el código de tiempo de ejecución buscará que el constructor acepte dos enteros y lo use.

+0

el espacio de nombres Qué necesito para usar? Me temo que mi Controls_pageGeneral es desconocido para la página. – SRachamim

+0

Es su clase ... si está en una aplicación web diferente no puede hacer eso, de lo contrario, solo agréguela a su propia aplicación. –

+0

no, está en la misma aplicación web (definida en web.config) – SRachamim

Cuestiones relacionadas