LoadControlでユーザーコントロールを動的に生成する

C#VB.NETコード上でコントロールを動的に生成し、ページ上に表示する場合、通常のサーバーコントロールの動的生成であれば

TextBox t = new TextBox();
PlaceHolder1.Controls.Add(t);

などとすれば出来ますが、ユーザーコントロール(ascx)の場合はnewではなく、LoadControlメソッドを使用するのが一番いいようです。newでも作れるけど、コントロールの初期化を正常に行うためにいろいろ面倒みたいで。

今回は以下のような単純なユーザーコントロールを例にしてみます。ラベルとテキストボックスを配置し、ユーザーコントロールのプロパティとしてそれらの値を外部から取得/設定できるものです。

これを動的に生成するにはこんな感じで…

public partial class test_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //静的に配置した場合
        this.Uc1_1.Title = "Label";
        this.Uc1_1.Data = "TextBox";

        //動的に配置する場合
        test_uc1 uc = (test_uc1)Page.LoadControl("uc1.ascx");
        uc.Title = "氏名";
        uc.Data = "ほげ ふが";
        this.PlaceHolder1.Controls.Add(uc);
    }
}


逆に、test_uc1をnewして使用しようとすると、Titleフィールドの設定時にエラーが出ます。ユーザーコントロール内のサーバーコントロールの初期化が行われていないっぽい。