2013-01-21 96 views
0

我想創建一個輪詢系統,詢問用戶他們想從下拉列表中添加的選項數量。asp.net動態控制值

然後,當用戶選擇一個數字,我想爲這些數字添加文本框,最後使用asp.net遍歷文本框並在數據庫中添加它們的值。

例子:

  1. User chooses to add 5 options.
  2. I use Jquery to to append 5 inputs to the form.
  3. User adds their values.
  4. I iterate through the text-boxes and execute a void based on these values.

,我能夠做的第一件3個步驟,但我停留在第4步。爲了解決這個問題,我試圖用一個循環:

foreach (TextBox tb in form1.Controls) 
{ 
    Response.Write(tb.Text); 
} 

而是拋出一個錯誤:

Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.TextBox'.

我如何可以遍歷扔文本框?

感謝

+0

嗯...你只寫了4個步驟... – Blachshma

+0

@Blachshma - 我的錯誤,問題更新。 – Wahtever

+0

請添加您到現在爲止的代碼,並解釋您的問題到底是什麼。 – Blachshma

回答

2

任何靜態內容由一個LiteralControl,這就是爲什麼您遇到的代表。一個真正簡單的方法是使用LINQ:

var ctls = form1.Controls.OfType<TextBox>(); 
foreach (var ctl in ctls) { ..) 

,或通過控制檢查的類型,你循環,以確保它首先是一個文本框:

foreach (Control tb in form1.Controls) 
{ 
    if (tb is TextBox) 
     Response.Write(((TextBox)tb).Text); 
} 
+0

謝謝Brian,兩種解決方案都能正常工作,我想知道如果一種解決方案更好嗎? – Wahtever

+0

我喜歡LINQ,因爲它保持簡潔。後者可能會更有效率,因爲第一個選項遍歷所有控件,類型檢查,返回一個集合,然後您可以通過它進行foreach。後者在一次操作中完成所有這些。但我真的不認爲性能增益是巨大的... –

+0

好的,謝謝布賴恩 – Wahtever

0

布賴恩的答案似乎是堅實的。我想到的一見鍾情另一種選擇是:

  • 聲明函數...
  • 從客戶端的輸入
  • 而對於聲明中的JS
  • 迭代一個簡單數組,甚至一個字符串每次迭代都應該將值保存在該數組中或連接值。

該數組然後可以保存爲一個字符串在一些asp隱藏字段爲了做你的服務器端的東西。

此致敬禮。

+0

這肯定會工作,但我想結合文本框與上傳,我無法通過JavaScript檢索文件路徑。謝謝 – Wahtever