2009年10月30日 星期五

aspnet 動態加入使用者控制項

要完成這個工作,有幾種選項。

(1.1)先在要使用「使用者控制項」的頁面,切換至「設計」模式。
(1.2)拖拉「使用者控制項.ascx」到頁面上,會產生@ Register指示詞,就可以把「使用者控制項」殺掉。
(1.3)在Page_Load的地方,先用
Control t1 = Page.LoadControl("MyUserControl.ascx");
取得實體,再用
t1.GetType().GetProperty("myAtt1").SetValue(t1, "value1", null);
設定屬性。

或者

(2.1)在要使用「使用者控制項」的頁面加入
<%@ Reference Control="MyUserControl.ascx" %>
(2.2)在Page_Load的地方,先用
MyUserControl t1 = (MyUserControl)LoadControl("MyUserControl.ascx");
取得實體,再設定屬性。
或者
Control t1 = this.Page.LoadControl("MyUserControl.ascx");
取得實體,再用
t1.GetType().GetProperty("myAtt1").SetValue(t1, "value1", null);
設定屬性。

(3.1)使用以下的一定失敗,我不知為何會失敗:
MyUserControlt1 = new MyUserControl();
t1.myAtt1= "value1";

註:t1.myAtt1 是會設定到 MyUserControl 裡面的 TextBox1.Text 的值。錯誤發生是因為設定時,TextBox1還是個null。我不知道為什麼當時TextBox1還是個null。