Доступ к нему по его идентификатору:
Markup:
<asp:TextBox runat="server" ID="myTextBox"></asp:TextBox>
Код:
myTextBox.Text = "This is a text!";
Обратите внимание , что вам нужно добавить runat="server"
, чтобы он был доступен.
Редактировать
После вашего комментария я думаю, что понимаю, к чему вы клоните. Вам нужно пройти через все элементы управления вниз по дереву элементов управления, чтобы найти все текстовые поля.
Вот рекурсивная реализация:
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;
}
Чтобы получить все текстовые поля на странице, вы будете называть ее страницей с корневым элементом управления:
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>();
и получить список текстовых ящиков с определенным идентификатором:
var myTextBox = this.FindControls()
.OfType<TextBox>()
.Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>();
Вы также можете использовать его в выражениях foreach:
foreach (Control c in this.FindControls())
{
...
}