C# 我们能否动态引用元素(服务器端)

C# 我们能否动态引用元素(服务器端),c#,asp.net,code-behind,C#,Asp.net,Code Behind,假设我有ID为“Input1”、“Input2”和“Input3”的元素 有没有一种方法可以循环使用它们,而不必编写: Input1.Value = 1; Input2.Value = 1; Input3.Value = 1; 在jquery中,您可以引用$('#Input'+i)这样的元素并循环通过i,类似的东西在ASP代码中非常有用 如果知道父容器,可以通过其.Controls()属性进行循环。如果从页面级别开始递归工作,最终可以访问页面上的所有控件 有关更多详细信息,请参见问题的答案。编

假设我有ID为“Input1”、“Input2”和“Input3”的元素

有没有一种方法可以循环使用它们,而不必编写:

Input1.Value = 1;
Input2.Value = 1;
Input3.Value = 1;

在jquery中,您可以引用$('#Input'+i)这样的元素并循环通过i,类似的东西在ASP代码中非常有用

如果知道父容器,可以通过其.Controls()属性进行循环。如果从页面级别开始递归工作,最终可以访问页面上的所有控件


有关更多详细信息,请参见问题的答案。

编辑::Duh,我再次搜索页面上的所有“x”控件,并得出以下源代码:

foreach(Control c in Page.Controls)
{
    if (c is TextBox)
    {
        // Do whatever you want to do with your textbox.
    }
}
有点。。。根据示例命名方案,您可以执行以下操作:

    private void Button1_Click(object sender, EventArgs MyEventArgs)
    {
          string controlName = TextBox

          for(int i=1;i<4;i++)
          {
           // Find control on page.
           Control myControl1 = FindControl(controlName+i);
           if(myControl1!=null)
           {
              // Get control's parent.
              Control myControl2 = myControl1.Parent;
              Response.Write("Parent of the text box is : " +  myControl2.ID);
          }
          else
          {
             Response.Write("Control not found");
          }
         }

    }
private void按钮1\u单击(对象发送者,事件args MyEventArgs)
{
string controlName=TextBox

对于(int i=1;i我喜欢保持强类型,所以我将它们存储在一个列表中。这使得代码对重构更具弹性,并且无需强制转换。将所有控件放入列表需要稍微多一些前期工作,但对我来说,这通常是值得的

我不确定你的控件是什么类型,所以我要假装它们是
Input
类型

var InputControls = new List<Input>(){Input1, Input2, Input3};
foreach(var input in InputControls)
{
    input.Value = 1;
}
var-InputControls=new List(){Input1,Input2,Input3};
foreach(InputControls中的var输入)
{
输入值=1;
}

您可能需要使用it's about webforms?好的,我试过了,但是控件对象没有值。我如何强制转换它或告诉代码此控件应该是输入类型,因此具有值定义?根据您的输入类型,您可能必须这样强制转换:((文本框)myControl1)。值