我有母版页及其内容页面。我想让内容页面上的文本框。如何在内容页面后面的C#代码中获取它们?
答案 0 :(得分:0)
使用它的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;
}
要获取页面中的所有TextBox,您将使用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的TextBox的列表:
var myTextBox = this.FindControls()
.OfType<TextBox>()
.Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>();
您也可以在foreach语句中使用它:
foreach (Control c in this.FindControls())
{
...
}