2012-02-28 60 views
0

我有這8個文本框,但是當我開始認爲它在我的頁面上非常混亂時。所以,我想如何實現一個按鈕,可以添加文本框,當用戶點擊它。這裏有人有想法或解決方案來幫助我嗎?我將不勝感激。謝謝。如何自動添加文本框

+0

可能重複的[JQuery的 - 創建隱藏的表單元素上飛](http://stackoverflow.com/questions/2408043/jquery-create-hidden-form-element-on-the -飛)。或者你想要服務器端?然後看看[這裏](http://www.singingeels.com/Articles/Dynamically_Created_Controls_in_ASPNET.aspx)。 – CodeCaster 2012-02-28 09:34:56

+0

嘗試看看這裏:http://stackoverflow.com/questions/4630095/dynamic-textbox-on-linkbutton-click – 2012-02-28 09:35:19

+0

如果可能的話,我想按鈕生成兩個文本框。 1的費用類型,另一個是價格。 tq – 2012-02-28 09:36:59

回答

0

如果你考慮使用jQuery,事情可能會很簡單:

<div id="text_box_container"> </div> 

<input type="button" value="text box inserter" id="text_box_inserter" /> 

現在的JavaScript/jQuery的一部分

$('#text_box_inserter').click(function(){ 
    $('#text_box_container').append('<input type="text" />'); 
}) 
0

這將創建一個文本框,並將其與id="divFirstName"添加到div。該div應該有runat="server"

TextBox tbFirstName = new TextBox(); 
tbFirstName.ID = "tbFirstName"; 
tbFirstName.Attributes.Add("Name", "tbFirstName"); 

divFirstName.Controls.Add(tbFirstName); 

然後,只需將代碼放在點擊事件。 (我知道我的命名很糟糕,純粹是爲了更好的理解)。

+0

謝謝。但是,我可以知道,點擊事件要放什麼? – 2012-02-28 09:48:34

+0

我不確定我明白你的意思。如果你有一個應該添加更多文本框的按鈕,那麼就把上面的代碼放在按鈕的click事件方法中。如果我現在感到困惑,那就讓我知道,然後編輯我的原始答案。 – AndersDaniel 2012-02-28 09:52:40

+0

哈哈。我想,也許我應該睡一會兒。我只是花了8小時在我的筆記本電腦上無影無蹤。但無論如何,謝謝!將更新一次,我試過雅編碼:) – 2012-02-28 09:56:41

2

可能最好的方法是將兩個文本框放在用戶控件中。然後該用戶控件可以封裝屬於兩個文本框的所有邏輯;它可以計算兩個值之間的差異,例如,封裝所有的驗證等等等等。你只需要寫一次這個位!

爲您的頁面添加佔位符;給它一個「DynamicControlHolder」或類似的ID。您還需要一個隱藏字段 - DynamicControlCount - 您可以使用它來存儲您添加的動態控件的數量。

兩個最重要的概念是:

  • 添加dynamic controlsright時間
  • 嘗試和maintain回傳之間的 ID是如此ASP.Net自動填充從ViewState中的值 你。否則,你必須自己管理這個 。

所以,當頁面加載的第一次,你可以不喜歡在Page_Init以下,例如:

{ 
    MyUserControl control = Page.LoadControl("~/path_to_my_usercontrol"); 
    control.ID = "MyUserControl1"; 
    DynamicControlCount.Value = "1"; 

    DynamicControlHolder.Controls.Add(control); 
} 

如果你再有你的頁面上的一個按鈕,「添加控件」,然後,單擊處理程序:

{ 
    int controlCount = Convert.ToInt32(DynamicControlCount.Value); 
    controlCount++; 

    //This section will add as many controls as i. 
    for(i = 1; i <= controlCount; i++) 
    { 
     MyUserControl control = Page.LoadControl("~/path_to_my_usercontrol"); 
     control.ID = String.Format("MyUserControl{0}", i);   
     DynamicControlHolder.Controls.Add(control);   
    } 

    DynamicControlCount.Value = Convert.ToString(controlCount); //Note this is problematic 
} 

控制第二部分的最簡單方法是使用UpdatePanel。造成這種情況的主要原因是,當您更新控件的數量時,您在頁面的生命週期中做得這麼晚,並且在完整回發中,該值可能無法按您期望的回發方式遞增。對於用戶來說,如果整個頁面沒有被髮回來修改其中的一小部分,它也看起來更好。

這些只是一些讓你開始的想法。對於這種事情一個很好的參考是在這裏:

Truly Understanding Dynamic Controls

你應該做一些解決這個讀數,因爲視圖狀態,頁面生命週期,客戶端渲染和其他因素的結合使最棘手的這一個,但最有趣的技術在ASP.Net