2

我正在编写一个 C#/ASP.Net Web 应用程序,并且我有大量文本框需要在后面的代码中设置为变量值。目前我正在做以下事情:

AspTextBox0.Text = codeBehindVariable[0];
AspTextBox1.Text = codeBehindVariable[1];
AspTextBox2.Text = codeBehindVariable[2];
AspTextBox3.Text = codeBehindVariable[3];
… 

有没有一种简单的方法可以在一个简单的“for”循环中做到这一点?

这是一个非常简化的例子,真实的程序有一个 switch case 和其他一些需要在分配变量时执行的测试。因此,“for”循环将大大简化代码的编写和可维护性。回到过去的 VB6 和控制阵列,这简直是小菜一碟。

4

3 回答 3

6

VB6的美好时光早已一去不复返,最好不要回来。

创建一个控制数组或更好的List<TextBox>自己:

var textBoxes = new List<TextBox> {
    AspTextBox0,
    AspTextBox1,
    // ...
};

然后用Zip 压缩codeBehindVariable

textBoxes.Zip(codeBehindVariable, 
              (textBox, variable) => textBox.Text = variable);

或者,如果您更喜欢for循环:

for ( int i = 0; i < codeBehindVariable.Length; i++ )
{
    textBoxes[i].Text = codeBehindVariable[i];
} 

请记住,在for循环中,您必须确保两者都textBoxes具有codeBehindVariable相同数量的项目(或使循环仅在最短列表的条目数量上运行)。该Zip函数将自行处理此问题。

于 2012-10-16T20:13:16.233 回答
1

假设您在一个实现的类中,System.Web.UI.Page您可以尝试查找控件以找到您想要的控件,如下所示:

for (int i = 0; i <= codeBehindVariable.Length; i++)  
{ 
  var textBox = FindControl("AspTextBox" + i, false);
  if(textBox != null)
  {
    textBox.Text = codeBehindVariable[i];  
  }
}
于 2012-10-16T20:24:58.687 回答
-1

你可以做这样的事情......

    int i = 0;
    foreach (Control ctrl in this.Controls)
    {
        if (ctrl is TextBox)
        {
            TextBox tempTextBox = (TextBox)ctrl;
            tempTextBox.Text = codeBehindVariable[i];
            i++;
        }
    }
于 2012-10-16T20:13:12.697 回答