使用它的 ID 访问它:
标记:
<asp:TextBox runat="server" ID="myTextBox"></asp:TextBox>
后面的代码:
myTextBox.Text = "This is a text!";
注意,您需要添加 runat="server" 才能访问它。
编辑
在您发表评论后,我想我明白您的意思了。您需要遍历控件树下的所有控件以找到所有 TextBox。
这是一个递归实现:
public List<Control> FindControls(Control root, Type type)
{
var controls = new List<Control>();
foreach (Control ctrl in root.Controls)
{
if (ctrl.GetType() == type)
controls.Add(ctrl);
if (ctrl.Controls.Count > 0)
controls.AddRange(FindControls(ctrl, type));
}
return controls;
}
要获取页面中的所有文本框,您可以使用 Page 作为根控件来调用它:
var allTextBoxes = FindControls(Page, typeof(TextBox));
上面的例子是为了阐明你应该如何进行的想法。我会通过使用扩展方法来做一些不同的事情:
public static class ExtensionMethods
{
public static IEnumerable<Control> FindControls(this Control root)
{
foreach (Control ctrl in root.Controls)
{
yield return ctrl;
foreach (Control desc in ctrl.FindControls())
yield return desc;
}
}
}
现在您可以直接在任何控件上使用它,甚至可以在结果上应用 Linq,因为它是一个 IEnumerable。
这将为您提供页面中所有控件的数组:
var allControls = this.FindControls().ToArray();
获取所有 TextBox 控件的数组:
var allTextBoxes = this.FindControls()
.OfType<TextBox>().ToLArray<TextBox>();
并获取具有特定 id 的文本框列表:
var myTextBox = this.FindControls()
.OfType<TextBox>()
.Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>();
你也可以在 foreach 语句中使用它:
foreach (Control c in this.FindControls())
{
...
}