[英]how to retrieve values from 100 Textboxes using loop
朋友們,
我有一個包含100個或更多文本框(HTML或ASP.NET)的網格,每個文本框都包含一個固定長度的文本值,需要將所有這些傳遞回后端表單以進行數據庫的批量更新。
我可以通過簡單地遍歷代碼后面的每個控件.text屬性來做到這一點。
然而,這使得代碼變得龐大而丑陋。
我想知道是否有任何原因使用一些受控的循環結構和檢索數據來完成每個控件
即
Private List<string> getdata()
{
Private List<String> MyList = new List<string>();
foreach (Textbox)control txbControl in ....// don't know what this will be
{
MyList.Add(txbControl.text);
}
}
請注意,所有這些文本框在頁面上都有唯一的ID標記即
<tablr>
<tbody>
<tr>
<td>
<asp:TextBox ID="TxB_Customize1" runat="server"></asp:TextBox>
<td/>
<td>
<asp:TextBox ID="TxB_Customize2" runat="server"></asp:TextBox>
<td/>
<td>
<asp:TextBox ID="TxB_Customize3" runat="server"></asp:TextBox>
...... ......
抱歉忘記提及這一點,文本框按列分組,給定列中的每個文本框共享相似的名稱,即給定實例中的“Txb_Customize”。
因此,在檢索值時,我還需要知道它的來源(可能是文本框ID)。
查看Control.Controls
屬性。
你想要的東西是這樣的:
foreach (Control control in Controls)
{
TextBox textBox = control as TextBox;
// Ignore non-textboxes
if (textBox != null)
{
list.Add(textBox.Text);
}
}
如果您使用的是.NET 3.5,則可以使用LINQ以更簡單的方式執行此操作:
return Controls.OfType<TextBox>()
.Select(textBox => textBox.Text)
.ToList();
您可以在javascript中執行此操作 - 為它們提供一個類名稱並將它們全部放入集合中並循環遍歷集合,然后使用ajax簡單地發布值。 JQuery在這里非常方便 -
$(“。yourclassname”)。each(function(index){$(this).val()//這將是你的文本框的值})
您可以在服務器端硬幣一個大字符串並解析,或者您可以構建一個名稱值數組,然后使用它
或者你可以這樣做:
int index = 1;
while ( ( TextBox tb
= FindControl (
string.Concat ( "TxB_Customize", index.ToString ( ) ) as TextBox != null )
{
MyList.Add ( tb.Text );
index++;
}
如果您實際上還有其他一些文本框,這可能會很好,這不是這個數據數組的一部分。
你可以遍歷容器的控件(使用MyContainer.Controls),如果你在那里有文本框就很容易,否則你可能需要這樣做:
foreach (Control myBox in MyContainer.Controls)
{
TextBox myBox = Control As TextBox
if (myBox != null)
// Do Stuff
}
當代碼的邏輯與textboxes'name相關時,我看到的唯一解決方案是從頭開始重寫這段代碼,然后向編寫這個廢話的程序員購買一些好的設計書。
如果您不想依賴服務器控件,可以使用Request.Form集合。
但是,您需要使用控件ID來判斷它是否是文本框,使用問題的ID:
Request.Form.AllKeys.Where(n => n.StartsWith("TxB_Customize"))
.Select(n => new[] { n, Request.Form[n] });
返回{Id,Value}對的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.