2016年11月28日 星期一

ASP.NET C# 動態新增textbox且讀取輸入的值

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 事件中執行,以確保在後續事件中可以取得頁面中所有的控制項。==>這是網路上找的原話