【问题标题】:ASP.NET: Getting all the page's control as IEnumerableASP.NET:将所有页面的控件作为 IEnumerable
【发布时间】:2009-04-23 10:29:25
【问题描述】:

我正在尝试将页面控件的集合与 LINQ 一起使用。 而这有效:

dim l = Me.Controls.OfType(Of TextBox).AsQueryable()

以下返回 ArgumentExceptionError:

dim l = Me.Controls.AsQueryable()

我需要所有控件。有什么帮助吗? 谢谢

【问题讨论】:

    标签: asp.net vb.net linq


    【解决方案1】:

    你试过了吗:

    Me.Controls.Cast(Of Control)
    

    出于兴趣,您为什么需要它作为IQueryableIEnumerable<T> 还不够吗? (这是Cast的结果。)

    只调用 AsQueryable 的问题是控件集合没有实现IEnumerable<T>,只是实现了IEnumerable

    【讨论】:

      【解决方案2】:

      另外,不要忘记控件是可以嵌套的,仅仅向页面询问它的控件只会告诉您直接子级的信息,但不会告诉您这些控件中的控件:

      Locate the web forms controls on a page by walking the Controls Collection

      此示例仅查找包含在 Page 对象中的控件以及作为页面的直接子级的控件。它不会找到作为控件子级的文本框,而该控件又是页面的子级。例如,如果您将 Panel 控件添加到页面,则 Panel 控件将是 Page 包含的 HtmlForm 控件的子控件,并且可以在此示例中找到。但是,如果您随后将 TextBox 控件添加到 Panel 控件中,则该示例将不会显示 TextBox 控件文本,因为它不是页面的子级或页面子级控件的子级。以这种方式遍历控件的一个更实际的应用是创建一个递归方法,可以调用该方法来遍历遇到的每个控件的 Controls 集合。但是,为清楚起见,下面的示例并未创建为递归函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 2011-02-11
        • 2014-06-21
        • 1970-01-01
        • 2010-10-13
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多