Я пытался выяснить, как это можно сделать, и я думаю, что нашел решение. Вы можете определить атрибуты на элементах управления в стороне aspx. Вы также можете запросить эти атрибуты, если элемент управления равен WebControl
(многие элементы управления, такие как TextBox, Label, Button и т. Д. Являются WebControls, но некоторые элементы управления данными, такие как Repeater, GridView, не являются). Используя эту информацию, я написал рекурсивный метод. Вот он, с его использованием:
First Name
<asp:TextBox runat="server" ID="tbxFirstName" ControlGroup="Editable" />
<asp:Label runat="server" ID="lblFirstName" ControlGroup="ReadOnly" />
Last Name
<asp:TextBox runat="server" ID="tbxLastName" ControlGroup="Editable" />
<asp:Label runat="server" ID="lblLastName" ControlGroup="ReadOnly" />
<asp:Button ID="btn" runat="server" Text="Do" OnClick="btn_Click" />
код позади:
protected void btn_Click(object sender, EventArgs e)
{
var controlsOfGroupReadonly = ControlsInGroup("Readonly");
}
protected IEnumerable<WebControl> FindControlsInGroup(Control control, string group)
{
WebControl webControl = control as WebControl;
if (webControl != null && webControl.Attributes["ControlGroup"] != null && webControl.Attributes["ControlGroup"] == group)
{
yield return webControl;
}
foreach (Control item in control.Controls)
{
webControl = item as WebControl;
if (webControl != null && webControl.Attributes["ControlGroup"] != null && webControl.Attributes["ControlGroup"] == group)
{
yield return webControl;
}
foreach (var c in FindControlsInGroup(item, group))
{
yield return c;
}
}
}
protected IEnumerable<WebControl> ControlsInGroup(string group)
{
return FindControlsInGroup(Page, group);
}
Я не знаю, есть ли способ, чтобы преобразовать этот метод индексатор.
Я пробовал, и результат был удачным для меня.
Это был хороший вопрос. Спасибо :)
Я думаю, что корневой элемент управления также должен быть перенесен в параметры, поскольку вы можете искать в FormView ex Также посещение полей шаблонов - проблема, которую стоит решить. –
Вы на самом деле правы. Однако метод FindControlsInGroup делает то, что вы говорите. Вы можете передать любой элемент управления в качестве параметра, и он возвращает элементы управления в этой группе. Может быть, мы можем дать одно и то же имя методам ControlsInGroups и FindControlsInGroup в качестве перегрузок. –