繁体   English   中英

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

[英]Finding control on pages that inherits from base page

在我的项目中,所有.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(((System.Web.UI.Page)this.Page).Controls中的控件c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM