2013-02-15 3 views
0

Есть ли способ узнать количество элементов управления, используемых на каждой странице приложения ASP.Net? Пожалуйста, помогитеКоличество элементов управления, используемых на каждой странице приложения ASP.Net?

+3

Зачем вам это нужно? Сначала определите элементы управления, все, что происходит от 'System.Web.UI.Control'? –

ответ

1

Зачем вам это нужно? Сначала определите элементы управления, все, что происходит от System.Web.UI.Control?

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

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    var allControls = this.GetControlsRecursively().ToList(); 
} 

Вот возможная реализация:

public static class ControlExtensions 
{ 
    public static IEnumerable<Control> GetControlsRecursively(this Control parent) 
    { 
     foreach (Control c in parent.Controls) 
     { 
      yield return c; 

      if (c.HasControls()) 
      { 
       foreach (Control control in c.GetControlsRecursively()) 
       { 
        yield return control; 
       } 
      } 
     } 
    } 
} 
+0

Незначительная точка: вместо 'c.Controls.Count> 0' используйте [' c.HasControls'] (http://msdn.microsoft.com/en-us/library/system.web.ui.control.hascontrols .aspx) - должно быть немного быстрее –

+0

@HansKesting: Спасибо, отредактировал его соответствующим образом. Но я предполагаю, что производительность не является причиной того, почему мы должны предпочесть 'HasControls'. Прикосновение к элементу 'Controls' рекурсивно приведет к тому, что ViewState будет загружен, если это еще не сделано для всех элементов управления, что может вызвать побочные эффекты. http://stackoverflow.com/a/5278825/284240 –

Смежные вопросы