2012-06-18 25 views
1

我通過代碼後面的按鈕點擊動態添加文本框,它工作正常。在另一個按鈕上單擊我想獲取所有動態添加的文本框的值。但是文本框的值是空的。如何在回發中保留動態添加的文本框的值?保留動態添加文本框的值

.aspx的代碼

<asp:Table runat="server" id="placeAddTds"> 
    <asp:TableRow> 

    <asp:TableCell><asp:TextBox ID="txt_from" runat="server" class="sabsw" TabIndex="88"></asp:TextBox></asp:TableCell> 
    <asp:TableCell><asp:TextBox ID="txt_to" runat="server" class="sabsw" TabIndex="89"></asp:TextBox></asp:TableCell> 
    <asp:TableCell><asp:TextBox ID="txt_per" runat="server" class="sabsw" TabIndex="90"></asp:TextBox></asp:TableCell> 

    <asp:TableCell> 
    <asp:Button class="main-btn add-btn pointer" runat="server" ID="btn_add" Text="Add" OnClick="TdsAddClick" TabIndex="91"></asp:Button> 
    </asp:TableCell> 
    </asp:TableRow> 
    </asp:Table> 

背後代碼:

protected void TdsAddClick(object sender,EventArgs e) 
    { 
     try 
     { 
      TextBox[] l1 = new TextBox[txtcount]; 
      TextBox[] l2 = new TextBox[txtcount]; 
      TextBox[] l3 = new TextBox[txtcount]; 
      for (int j = 1; j < txtcount; j++) 
      { 
       l1[j] = new TextBox(); 
       l2[j] = new TextBox(); 
       l3[j] = new TextBox(); 
       l1[j].ID = "txt_from" + j; 
       l1[j].Attributes.Add("class","sabsw"); 
       l2[j].ID = "txt_to" + j; 
       l2[j].Attributes.Add("class", "sabsw"); 
       l3[j].ID = "txt_per" + j; 
       l3[j].Attributes.Add("class", "sabsw"); 
       placeAddTds.Rows.Add(new TableRow()); 
       placeAddTds.Rows[j].Cells.Add(new TableCell()); 
       placeAddTds.Rows[j].Cells[0].Controls.Add(l1[j]); 
       placeAddTds.Rows[j].Cells.Add(new TableCell()); 
       placeAddTds.Rows[j].Cells[1].Controls.Add(l2[j]); 
       placeAddTds.Rows[j].Cells.Add(new TableCell()); 
       placeAddTds.Rows[j].Cells[2].Controls.Add(l3[j]); 
      } 
      txtcount++; 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

感謝,

+0

那麼你必須重新創建他們在每個回發,並從Form集合 – V4Vendetta

+0

我認爲它正在對每一個回發創建獲取值。但我不知道如何獲得動態創建的文本框的按鈕點擊另一個按鈕的值。 – asifa

+0

我認爲這不是一個好方法,如果你發佈你的req,那麼SO能夠提供比這更好的方法。 – kbvishnu

回答

0

您可以在列表中您添加具有的ViewState屬性爲這個隱藏代碼和存儲所有的值:

private List<string> TextBoxValue 
     { 
      get 
      { 
       return (List<string>)ViewState["TextBoxValue"]; 
      } 
      set 
      { 
       ViewState["TextBoxValue"] = value; 
      } 
     } 

然後,您可以將文本框的值存儲在此屬性中。例如:

TextBoxValue.Add(textBox1.Text); 

但是,這會使頁面變得沉重。

+0

我認爲這種方法會讓你在每次回帖時都吃掉時間。感謝你的回答。 – kbvishnu

+0

你能提出更好的解決方案嗎? – asifa

+0

@VeeKeyBee:是的,但只有當你的名單有大量的記錄。 –

1

我希望這是他的要求從您的評論。

我有兩個按鈕。上一個按鈕,我想動態和的第二個按鈕的點擊添加文本框點擊我要保存在數據庫中

所有的文本框的值,你有2個按鈕 一個按鈕,你可以使用jQuery創建文本框。 (與發佈相比,客戶端腳本速度更快)。

Here you can see how to add text box using Jquery

所以,你可以動態地添加文本框沒有回發。

Another button you can serialize the form using Jquery and send it to server.

數據傳遞到服務器 這將創建一個JSON對象,並把它傳遞給服務器。 您可以傳入__doPostBack(control,args)。在參數中,您可以傳遞JSON值。 Click Here

過程中的JSON數據

C# JSON custom serialization 這將展示如何從JSON獲取數據。

這是一種可以用客戶端腳本實現的方法,它可能比您建議的方法運行速度快得多。

感謝