2014-01-22 4 views
1

Я пытаюсь сделать функцию, чтобы отключить все элементы управления на определенной странице.Loop through controls asp.net

Когда я Переберите все элементы управления отключаются, кроме тех, внутри DIV, который установлен в RUNAT = «сервер»

Это общий вид конструкции:

<form id="form1" runat="server"> 
    <div id="wrapper"> 
    <%-- 1st set of ASP controls --%> 
     <div id="Main" runat="server"> 
     <%-- 2nd set ASP of controls --%> 
     </div> 
    </div> 
<form> 

Мой код выглядит следующим образом:

For Each c As Control In Page.Controls 
    For Each ctrl As Control In c.Controls 
     'disabling controls 
    Next 
Next 

Я хочу использовать эту функцию во всех своих страницах, пожалуйста, не могли бы вы дайте мне знать, как перебрать дивы, которые Runat = «Сервер»?

ответ

3

Что вы хотите сделать, это отключить/включить элементы управления, являющиеся дочерними страницами страницы, а также элементы управления, которые являются дочерними элементами элементов управления, которые являются дочерними страницами страницы. Для этого вам понадобится рекурсивная функция. Что-то вроде:

private void DisableChildControls(ControlCollection controls, int depthLimit) 
{ 
    if(depthLimit <= 0) 
     return; 
    foreach(var ctl in controls) 
    { 
     ctl.Enabled = false; 
     if(ctl.Controls.Count > 0) 
     { 
     DisableChildControls(ctl.Controls, --depthLimit); 
     } 
    } 
} 

В случае загрузки страницы вы вызываете начать обход с помощью:

if(this.Controls.Count > 0) 
    DisableChildControls(this.Controls, 2); //If you want the depth to be two levels. 

Это recursivly отключить контроль вниз по дереву, до предела вы указали. Просто подумайте, что для сложной страницы эта рекурсивная операция может занять значительное количество времени.

отметить также, что лучше или хуже, это будет цикл только через элементы управления, отмеченные runat="server"

+0

Спасибо вам много человек, я на основе моего решения на вашем коде это действительно помогло! – SalemRady

+0

@SalemRady - Отлично! Счастливый мой пример помог вам. –

+0

@SalemRady - Добавлен параметр ограничения глубины для полноты. Я думал, вы также можете быть заинтересованы в реализации. –