在从基页继承的页面上查找控件

本文关键字:查找 控件 基页 继承 | 更新日期: 2023-09-27 18:30:18

在我的项目中,所有.aspx页面都继承自自定义基类页面,而自定义基类页面又继承自 System.Web.UI.Page。我想在当前页面中找到控件。对于我正在使用的那个foreach 循环

foreach(control c in page.controls)

为此,我无法将当前页面投射到 system.web.ui.page。如何将当前页面转换为系统 system.web.ui.page?

在从基页继承的页面上查找控件

请注意,您正在处理一个控制树,因此您可能希望在此处进行递归。以下方法应该会有所帮助(带有递归调用的 Linq):

private static IEnumerable<Control> FlattenControlTree<TFilterType>(Control control)
{
    if (control is TFilterType)
    {
        yield return control;
    }
    foreach (Control contr in control.Controls.Cast<Control>().SelectMany((c) => FlattenControlTree<TFilterType>(c)))
    {
        if (contr is TFilterType)
        {
            yield return contr;
        }
    }
}

在一天结束时,您只需要致电:

var controls = FlattenControlTree<YourBaseType>(this.Page);

请注意,这种递归在涉及大树时不是很有效。

你可以试试这个;

foreach(控制 c in ((System.Web.UI.Page)this.页)。控制)