ASP.NET найти все элементы управления на странице и скрыть их - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь в Page_Load скрыть все мои списки RadioButtonLists, но я не могу понять синтаксис совершенно правильно

Я предполагаю, что должен использовать синтаксис FindControl примерно так

CType(FindControl, RadioButtonList)

А потом я предполагаю, что мне придется перебрать каждый RadioButtonList и установить для него атрибут Visible = False.

Кажется, я получаю сообщение об ошибке с кодом выше.

Есть идеи, что я могу попробовать?

Спасибо

Ответы [ 4 ]

3 голосов
/ 04 февраля 2011

Попробуйте это:

protected void Page_Load(object sender, EventArgs e)
{
    HideRadioButtonLists(Page.Controls);
}

private void HideRadioButtonLists(ControlCollection controls)
{
    foreach (WebControl control in controls.OfType<WebControl>())
    {
        if (control is RadioButtonList)
            control.Visible = false;
        else if (control.HasControls())
            HideRadioButtonLists(control.Controls);
    }
}
1 голос
/ 04 февраля 2011

FindControl работает только в том случае, если вы знаете имя искомого элемента управления и, более того, это не рекурсивный вызов.Если вы не можете гарантировать, что ваш контроль будет находиться в конкретном контейнере, в котором вы ищете, вы его не найдете.Если вы хотите найти все списки радиокнопок, вам нужно написать метод, который циклически перебирает все наборы элементов управления в родительских / дочерних отношениях и устанавливает видимый для false список радиобуттон.для этой функции (не проверено, может потребоваться настройка):

public void HideRadioButtonLists(System.Web.UI.ControlCollection controls)
{
    foreach(Control ctrl in controls)
    {
        if(ctrl.Controls.Count > 0) HideRadioButtonLists(ctrl.Controls);
        if("RadioButtonList".Equals(ctrl.GetType().Name, StringComparison.OrdinalIgnoreCase))
            ((RadioButtonList)ctrl).Visible = false;
    }
}
0 голосов
/ 04 февраля 2011

Выполнение foreach для свойства Controls и проверка типа будет медленным.То, что вы должны делать, на мой взгляд и в зависимости от ваших требований, это использовать CSS / скины, чтобы скрыть ненужные кнопки или просто добавить их в List<T>, чтобы вы могли просматривать только те, которые вам нужно изменить.

В худшем случае foreach будет работать, но он немного медленный и нежелательный.

0 голосов
/ 04 февраля 2011

Почему бы не использовать страницу обложки ASP.Net для установки значений по умолчанию для всех списков RadioButtonLists равными visible = false.

Я бы определенно решил использовать страницу скина здесь.

...