Как отключить ASP: панель, кроме выборочного дочернего контроля? - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть панель asp: в корне и много элементов управления внутри. Когда я отключаю панель, все дочерние элементы отключаются (Panel.Enabled = false).

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

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


EDIT:

На самом деле, то, что я делаю, это версия страницы "ТОЛЬКО ДЛЯ ЧТЕНИЯ" и версия формы "ОБНОВЛЕННАЯ ОБНОВЛЕНИЕ".

Ответы [ 4 ]

3 голосов
/ 18 сентября 2009

Если вы хотите отключить большинство элементов управления, вам нужно что-то вроде

DisableAllChildControls(panel); // disabled all controls within panel
//then enable those you want to keep enabled
HyperlinkControl1InPanel.Enabled=true;
HyperlinkControl2InPanel.Enabled=true;
...

void DisableAllChildControls(WebControl p)
{
   foreach (WebControl c in p.Controls)
   {
      c.Enabled=false;
      DisableAllChildControls(c); //recurse
   }
}

или если вы хотите, чтобы все гиперссылки были включены

void DisableAllControlsButHyperlinks(WebControl p)
{
   foreach (WebControl c in p.Controls)
   {
      c.Enabled=(c is HyperLink);
      DisableAllControlsButHyperlinks(c); //recurse
   }
}
2 голосов
/ 04 июня 2010

Попробовал все разрешение, но оно не сработало, затем просто начал с основ и достиг его, пожалуйста, смотрите ответ ниже, который может вам помочь

foreach (Control c in Panel1.Controls)
{
    if (c is WebControl)
    {
        WebControl wc = (WebControl)c;
        if (c.ID.Equals("ControlID"))
        {
            wc.Enabled = true;
        }
        else
        {
            wc.Enabled = false;
        }
    }

}

как элементы управления Literal? (Например, доступ к держателю содержимого невозможен как webcontrol), а свойство включения cntrols доступно только для веб-элементов управления и элементов управления html

1 голос
/ 18 сентября 2009

Очень сложно понять, чего именно вы хотите добиться. Ответы выше кажутся мне вполне правдоподобными. Однако у меня есть ощущение, что вы хотите оставить включенными только некоторые определенные элементы управления, которые могут быть определенными кнопками и определенными гиперссылками. Это правильно ??

Почему вы не думаете о каком-то подходе, когда вы объявляете элементы управления (например, с их идентификатором), которые вы НЕ хотите отключать ?? Вы можете сделать это, объявив список строк, представляющих идентификаторы элементов управления, которые не должны быть отключены на вашей странице / usercontrol, например

string[] controlIdsToKeepEnabled = new string[]{"buttonSubmit", "hyperlinkInfo"}

Затем в методе, в котором вы рекурсивно отключаете все элементы управления вашего сайта, вы проверяете, находится ли элемент управления в списке «controlIdsToKeepEnabled».

Немного сложно, но может подойти для вашего особого случая. Затем эта функциональность может быть красиво упакована в отдельный пользовательский серверный элемент управления.

0 голосов
/ 18 сентября 2009

хорошо, если вы не хотите ломать панель, вы можете зациклить ее дочерние элементы управления (если их не слишком много) Псевдокод:

foreach(var c in panel.controls)
{
    if(c is not a hyperlink) c.Enabled=false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...