Default.aspx:
Default.aspx.cs:
Button1:動態新增一個textbox,ID="txt_1"
Button2:讀取txt_1.text放到label
程式碼:
protected void Page_Load(object sender, EventArgs e){
if( ViewState["Ctl_count"]!=null)
{
TextBox txb = new TextBox();
txb.ID = "txt_1";
Panel1.Controls.Add(txb);
ViewState["Ctl_count"] = 1;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox txb = new TextBox();
txb.ID = "txt_1";
Panel1.Controls.Add(txb);
ViewState["Ctl_count"] = 1;
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox txb = (TextBox)Panel1.FindControl("txt_1");
Label1.Text = txb.Text;
}
程式重點:
- 由於動態新增的物件會在按Button2的時候,跑到Load整個洗掉,所以利用 ViewState["Ctl_count"] 來記錄擬新增了幾個物件。
- 我這個範例固定新增一個看不太出來,但是如果是不能確定會新增幾個的時候就很需要了。
- 如果是一開始就直接動態新增可以寫進Page_Init裡面。
- 控制項的初始化(Initialize)的動作一定要放在 Page_Init 事件中!控制項的初始化也包括設定控制項的預設值(Default Value)。千萬不能將設定控制項初始值的程式碼寫在 Page_Load 事件裡,否則當 PostBack 回來的值會被 Page_Load 事件中的程式碼蓋掉。動態將控制項加入到 ASP.NET 頁面中「最好」在 Page_Load 事件中執行,以確保在後續事件中可以取得頁面中所有的控制項。==>這是網路上找的原話