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

时间:2009-04-23 10:29:26

标签: asp.net vb.net linq

我正在尝试使用LINQ的页面控件集合。 虽然这有效:

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

以下返回ArgumentExceptionError:

dim l = Me.Controls.AsQueryable()

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

2 个答案:

答案 0 :(得分:1)

你试过了吗?

Me.Controls.Cast(Of Control)

出于兴趣,你为什么需要IQueryableIEnumerable<T>对你来说不够吗? (这是Cast的结果。)

仅调用AsQueryable的问题是控件集合不实现IEnumerable<T>,而只是IEnumerable

答案 1 :(得分:1)

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

  

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

     

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