想要抓取動態產生的控制項的值,要利用到識別的 ID 所以在建立控制項的時候就要指定給它,要使用的時候使用父容器的 FindControl 方法找出控制項
protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { if ( this.ViewState["TextBoxAdded"] != null && (bool)this.ViewState["TextBoxAdded"] == true) { AddTextBox(); } } } //動態新增控制項 private void AddTextBox() { PlaceHolder1.Controls.Clear(); //先清除所有子控制項 TextBox textbox = new TextBox(); textbox.ID = "DynBox1";//重點是要給他一個ID PlaceHolder1.Controls.Add(textbox); this.ViewState["TextBoxAdded"] = true; } //事件觸發動態新增控制項 protected void Button1_Click(object sender, EventArgs e) { AddTextBox(); } //取值出來 protected void Button2_Click(object sender, EventArgs e) { TextBox tmpbox = PlaceHolder1.FindControl("DynBox1") as TextBox; Label1.Text = tmpbox.Text; }
延伸應用(產生多個TextBox):
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) ViewState["Count"] = 0; else { if ( ViewState["ADD"] != null && (bool)this.ViewState["ADD"] == true) { AddTextBox(); } } } //事件觸發動態新增控制項,並累加值 protected void Button1_Click(object sender, EventArgs e) { ViewState["Count"] = ((int)ViewState["Count"]) + 1; AddTextBox(); } //動態新增控制項 private void AddTextBox() { PlaceHolder1.Controls.Clear(); //先清除所有子控制項 for (int i = 0; i < (int)ViewState["Count"]; i++) { TextBox textbox = new TextBox(); textbox.ID = "Dynbox_" + i.ToString(); //使用流水號取ID PlaceHolder1.Controls.Add(textbox); } this.ViewState["ADD"] = true; } protected void Button2_Click(object sender, EventArgs e) { //讀出PlaceHolder所有是TextBox子控項的text屬性 foreach (Control obj in PlaceHolder1.Controls) { if (obj is System.Web.UI.WebControls.TextBox) { Response.Write(obj.ID + " = " + ((TextBox)obj).Text + " ;"); } } }
全站熱搜