我们可以动态引用元素(服务器端)

时间:2015-04-07 12:46:41

标签: c# asp.net code-behind

假设我的ID为“Input1”,“Input2”和“Input3”。

有没有办法循环使用它们而不必写:

Input1.Value = 1;
Input2.Value = 1;
Input3.Value = 1;
在jquery中你可以只引用像$('#Input'+ i)这样的元素并循环遍历i,类似的东西在后面的ASP代码中非常有用。

3 个答案:

答案 0 :(得分:2)

编辑: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");
          }
         }

    }

这将让你循环通过数字命名的控件,但否则它有点笨重。

答案 1 :(得分:1)

如果您知道父容器,则可以循环其.Controls()属性。如果从页面级别开始并以递归方式工作,则最终可以到达页面上的所有控件。

有关详细信息,请参阅this问题的答案。

答案 2 :(得分:0)

我喜欢保持强类型,所以我将它们存储在列表中。这使得代码对重构更具弹性,并且不需要强制转换。将所有控件放入列表需要更多的前期工作,但对我而言,它通常是值得的。

我不确定您的控件属于哪种类型,因此我会假装他们属于Input类型。

var InputControls = new List<Input>(){Input1, Input2, Input3};
foreach(var input in InputControls)
{
    input.Value = 1;
}