Группировка серверных элементов управления ASP.net для изменения свойств без ссылки на них по имени - PullRequest
2 голосов
/ 20 октября 2011

Я пытаюсь динамически установить свойство Visible для нескольких полей, панелей, кнопок и т. Д. Из моего кода для страницы aspx.Мне было интересно, есть ли способ сгруппировать серверные элементы управления в какую-то логическую группу, чтобы вы могли сделать что-то вроде этого псевдокода:

foreach(c in controlgroup) {
    c.Visible = value
}

Причина в том, что на странице отображаются различные типы параметровпо параметру ID в URL.Я видел этот вопрос , но мне интересно, есть ли другой способ сделать это, кроме использования пользовательских элементов управления?

Редактировать : Было бы неплохо, если бы я могустановите группу на странице aspx вместо того, чтобы добавлять каждый элемент управления вручную.

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Если вы поместите их в какой-либо контейнер, например Panel или PlaceHolder, вы можете сделать что-то вроде этого:

List<WebControl> ctrlList = PlaceHolder1.Controls.Cast<WebControl>().ToList();
foreach (WebControl ctrl in ctrlList)
{
    ctrl.Visible = false;
}

Вы можете сократить приведенный выше пример, выполнив следующее:

PlaceHolder1.Controls.Cast<WebControl>().ToList().ForEach(x => x.Visible = false);

Если вы хотите, вы можете создать свойства, которые возвращают списки различных типов элементов управления:

public List<TextBox> InputList
{
    get
    {
        return PlaceHolder1.Controls.OfType<TextBox>().ToList();
    }
}
2 голосов
/ 20 октября 2011

Конечно.Вы можете сгруппировать их, построив List<Control>, а затем перебрать его.

var controlList = new List<Control>();
controls.Add(someTextBox);
controls.Add(someOtherTextBox);
// etc.

// elsewhere
foreach (var control in controlList)
    control.Visible = false;

Конечно, если вы работали над элементами управления, содержащимися в общем контейнере (форме, панели и т. Д.), Вы могли бы просто зациклить его коллекцию элементов управления.* И в этом тривиальном примере работа самого контейнера будет невидимой.Помимо этих простых методов, нет способа группировать элементы управления , о которых я знаю, , но я не часто имею дело с пользовательским интерфейсом.

0 голосов
/ 20 октября 2011

Существуют различные способы сделать это и зависит от вашего указанного проекта / потребностей.

Вы можете обернуть группу предметов в <asp:Panel>, а затем использовать коллекцию Children.

Вы можете присвоить элементам управления специальные идентификаторы, такие как group1_name, group2_name и т. Д., И зациклить коллекцию дочерних элементов управления страницы

Вы можете добавить атрибуты к своим элементам управления, такие как <asp:Button ... myGroup="1" /> и зациклить дочерние элементы управления Page, а затем проверить атрибуты.

Вы можете добавить базовый класс, отслеживать коллекцию детей и использовать свойство .Tag для назначения групп

и так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...