2013-10-28 73 views
0

當我點擊btnGDynamicCont時,我想加載第一組控件,然後在每次進一步單擊該按鈕時,添加一個新控件(文本框)以及其他控件,所以每次點擊時我都會添加一個新的文本框州。如何在按鈕點擊時添加新的動態控件?

你知道我應該在哪裏添加新文本框的創建,以便在每次回發後保留它嗎?

{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Convert.ToString(ViewState["Generated"]) == "true") 
      GenerateDynamicControls(); 

    } 

    public void GenerateDynamicControls() 
    { 
     TextBox txtDynamic = new TextBox(); 
     txtDynamic.ID = "txtDynamic"; 
     txtDynamic.Text = "Dynamic TextBox"; 
     Page.Form.Controls.Add(txtDynamic); 

     TextBox txtDynamic2 = new TextBox(); 
     txtDynamic2.ID = "txtDynamic2"; 
     txtDynamic2.Text = "Dynamic Textbox"; 
     Page.Form.Controls.Add(txtDynamic2); 

    } 

    protected void btnGDynamicCont_Click1(object sender, EventArgs e) 
    { 
     if (Convert.ToString(ViewState["Generated"]) != "true") 
     { 
      GenerateDynamicControls(); 
      ViewState["Generated"] = "true"; 
     } 
     else 
     { 
      Response.Write("<h2>Controls are already exist in page</h2>"); 

     } 
    } 
} 

}

回答

0

動態控件通常在Page_Load方法重建。有關更多信息,請參閱Dynamically Created Controls in ASP.NET文章。

+0

我目前添加的那些是在page_load中,問題是如果我不想添加預定義的控件,而是每次單擊(我這樣做)時添加一個新實例,那麼它創建第一個控件並從不創建第二個控件。我曾嘗試過沒有ID等,希望它會繼續在頁面上創建控件,但事實並非如此。 – connersz

+0

我不確定我是否理解你的評論:(無論如何,如果你希望以前創建的控件出現在頁面上,你應該在每次向服務器請求時重新創建它們。 – platon

0

你可以參考下面的鏈接,解決一個非常相似的問題。

unable to add more than one server control dynamically in asp.net

每次回發發生,你應該重新創建已經存在的控件(動態添加)在Page_Load事件和新的控制都在button_click事件被創建。

使用一些邏輯來生成維護視圖狀態控件的id。如果在回發之前和之後生成的控件的id相同,VIEWSTATE將自動處理。

跟蹤文本框數量的一種方法是將計數存儲在會話中。

+0

現在我已經接近下面的代碼,我仍然有幾個問題,我不能解決1)第一次圍繞2個盒子被添加2)(這很奇怪)文本框保存不僅在回發期間,而且在頁面刷新,瀏覽器關閉,調試停下來,不同的瀏覽器等等如何發生? – connersz

+0

對不起,不會讓我添加代碼。 – connersz

+0

是的,在示例中引用了2行是默認添加的。如果需要,您可以將其刪除。那些是aspx中的靜態行 – Saranya

相關問題