我们可以动态引用元素吗(服务器端)
Can we dynamically reference element (Server Side)
假设我有 ID 为 "Input1"、"Input2" 和 "Input3" 的元素。
有没有办法循环遍历它们而不必写:
Input1.Value = 1;
Input2.Value = 1;
Input3.Value = 1;
在 jquery 中你可以只引用一个元素,比如 $('#Input'+i) 并循环遍历 i,类似的东西在 ASP 后面的代码中会非常有用。
如果您知道父容器,则可以循环遍历其 .Controls() 属性。如果您从页面级别开始并递归工作,您最终可以到达页面上的所有控件。
有关详细信息,请参阅 this 问题的答案。
编辑: 呃,我再次搜索页面上的所有 "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");
}
}
}
这将允许您循环遍历以数字命名的控件,但在其他方面有点笨拙。
我喜欢保持强类型,所以我将它们存储在列表中。这使代码对重构更具弹性,并且无需强制转换。将所有控件放入列表中需要做更多的前期工作,但对我来说这通常是值得的。
我不确定你的控件是什么类型,所以我假设它们是 Input
.
类型
var InputControls = new List<Input>(){Input1, Input2, Input3};
foreach(var input in InputControls)
{
input.Value = 1;
}
假设我有 ID 为 "Input1"、"Input2" 和 "Input3" 的元素。
有没有办法循环遍历它们而不必写:
Input1.Value = 1;
Input2.Value = 1;
Input3.Value = 1;
在 jquery 中你可以只引用一个元素,比如 $('#Input'+i) 并循环遍历 i,类似的东西在 ASP 后面的代码中会非常有用。
如果您知道父容器,则可以循环遍历其 .Controls() 属性。如果您从页面级别开始并递归工作,您最终可以到达页面上的所有控件。
有关详细信息,请参阅 this 问题的答案。
编辑: 呃,我再次搜索页面上的所有 "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");
}
}
}
这将允许您循环遍历以数字命名的控件,但在其他方面有点笨拙。
我喜欢保持强类型,所以我将它们存储在列表中。这使代码对重构更具弹性,并且无需强制转换。将所有控件放入列表中需要做更多的前期工作,但对我来说这通常是值得的。
我不确定你的控件是什么类型,所以我假设它们是 Input
.
var InputControls = new List<Input>(){Input1, Input2, Input3};
foreach(var input in InputControls)
{
input.Value = 1;
}