c# - 在继承自基页的页面上查找控件

标签 c# asp.net inheritance

在我的项目中,所有 .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);

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

关于c# - 在继承自基页的页面上查找控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18651681/

相关文章:

java - 替代多重继承来扩展库

Python类继承: AttributeError: '[SubClass]' object has no attribute 'xxx'

c# - TreeNode 中的自动换行

c# - 结果显示 System.String[]

c# - 仅获取 Entity Framework lambda 连接中的特定列

c# - 正则表达式匹配后如何选择n个字符

javascript - 无法从代码后面的 Li 获取事件条件

ASP.NET 安全角色和权限

c# - 确保用户输入正确的数据类型。时间:2019-03-17 标签:c#ConsoleApp

java - 可变类作为不可变类的子类