LoadControl und Parameterübergabe

Written on November 25, 2003

Ein kürzlich behandeltes Problem in der ASP.NET-Mailingliste war die Übergabe von Parametern an ein UserControl in der LoadControl-Anweisung. Eine mögliche Lösung werde ich heute vorstellen.

Platziert man das LoadControl im Page_Load der .aspx-Seite und benötigt das mittels LoadControl zu ladende UserControl zur korrekten Funktion Parameter, so braucht man eine Möglichkeit, diese Parameter an das UserControl zu übergeben, bevor das UserControl ausgeführt wird.

Eine mögliche Lösung besteht darin, dem UserControl eine Bind()-Methode zu spendieren, welche den Aufruf der Funktionalität des UserControls aus dem Page_Load() des UserControls zieht.

Befindet sich der Aufruf der Funktionalität des UserControls hingegen im Page_Load(), so wird die Seite, auf der das UserControl dynamisch geladen wird, bis Page_Load() ausgeführt, danach startet der LifeCycle des User Controls und wird ebenfalls bis Page_Load() (des UserControls) ausgeführt, d.h. man hat keine Möglichkeit mehr, die Parameter zu übergeben.

Die Lösung sieht also wie folgt aus:

myControl.ascx.cs:

public class MyUserControl : System.Web.UI.UserControl

{

protected System.Web.UI.WebControls.Label LBLFirstName;  

protected System.Web.UI.WebControls.Label LBLLastName;  

private string \_firstName = "";  

private string \_lastName = "";  



private void Page\_Load(object sender, System.EventArgs e)  

{  

    if(IsPostBack)  

    {  

    }  

}  



public void Bind()  

{  

    LBLFirstName.Text = this.FirstName;  

    LBLLastName.Text  = this.LastName;  

}  



public string FirstName  

{  

    get  

        {  

return _firstName;

        }  

    set  

        {  

            \_firstName = value;  

        }  

}  



public string LastName  

{  

    get  

        {  

return _lastName;

        }  

    set  

        {  

            \_lastName = value;  

        }  

}  

}

myPage.aspx.cs:

public class myPage : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{  

    if(!IsPostBack)  

    {  

        MyUserControl uc = (MyUserControl)Page.LoadControl("myControl.ascx");  

        uc.FirstName = "Alexander";  

        uc.LastName = "Zeitler";  

        uc.Bind();  

        Page.Controls.Add(uc);  

    }  

}  

}