代码之家  ›  专栏  ›  技术社区  ›  pistacchio

ASP.NET:将页的所有控件获取为IEnumerable

  •  1
  • pistacchio  · 技术社区  · 16 年前

    我正在尝试将页控件的集合与LINQ一起使用。

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

    以下返回ArgumentExceptionError:

    dim l = Me.Controls.AsQueryable()
    

    全部的 控制装置。有什么帮助吗? 谢谢

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jon Skeet    16 年前

    你试过:

    Me.Controls.Cast(Of Control)
    

    IQueryable ? 不是吗 IEnumerable<T> 够你吃吗?(这是 Cast

    调用AsQueryable的问题是控件集合没有实现 ,只是 IEnumerable .

        2
  •  1
  •   Zhaph - Ben Duguid    16 年前

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

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

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