2011-12-04 15 views
9

Ho creato un controllo utente.Carica il controllo utente in modo dinamico con i parametri

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 
    } 

} 

Ora voglio dinamicamente creare questo controllo e passarlo parametri. Ho provato a utilizzare la funzione LoadControl ma ha solo due costrutti: uno con stringa (percorso) e un altro con Tipo t e matrice di parametri.

Il primo metodo funziona, ma a causa dei miei parametri e devo usare il metodo più complicato di LoadControl, ma non capisco come usarlo. Come posso assegnare il mio percorso stringa del mio controllo a quell'oggetto strano Tipo t?

Grazie per il vostro aiuto.

risposta

10

Nel tuo caso non è rilevante, poiché il secondo metodo accetta i parametri passati al costruttore corretto, ma non hai affatto il costruttore a tuo controllo.

Basta caricare il controllo utilizzando il percorso del file .ascx, gettato al tipo corretto e impostare le proprietà uno per uno:

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

Se ti ostini a usare costruttore, aggiungere prima tale:

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

E poi:

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

farà lo stesso come l'abov e mentre il codice runtime cercherà il costruttore che accetta due numeri interi e lo usa.

+0

che namespace Ho bisogno di usare? Temo che il mio Controls_pageGeneral non sia noto alla pagina. – SRachamim

+0

È la tua classe .. se è in una diversa applicazione web non puoi farlo, altrimenti aggiungilo alla tua applicazione. –

+0

no, è nella stessa applicazione web (definita in web.config) – SRachamim

Problemi correlati