【发布时间】:2013-02-15 08:19:46
【问题描述】:
有没有办法找出 ASP.Net 应用程序的每个页面中使用的控件的数量? 请帮忙
【问题讨论】:
-
为什么需要它?首先定义控件,所有源自
System.Web.UI.Control?
标签: asp.net
有没有办法找出 ASP.Net 应用程序的每个页面中使用的控件的数量? 请帮忙
【问题讨论】:
System.Web.UI.Control?
标签: asp.net
你为什么需要它?首先定义控件,所有从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;
}
}
}
}
}
【讨论】:
c.Controls.Count > 0,而不是c.HasControls - 应该稍微快一点
HasControls 的原因。递归地触摸Controls 属性将导致加载ViewState(如果尚未为所有控件完成),这可能会导致副作用。 stackoverflow.com/a/5278825/284240