【发帖带散300分】重量级地查询控件

时间:2021-01-13 18:08:03
好几个月没有发帖了,这次写一个简单的帖子,期望可以提高各位对asp.net等开发的兴趣。

在asp.net中,FindControl方法有其自己的含义,参见我在 以前的一个帖子中的解释。

asp.net中使用FindControl有其严格的逻辑意义,超乎初学者的想象。过去我较多地去“纠正”对FindControl的认识问题,但是这种“错误”的理解如果要实现又该如何实现呢?我给出我在写自动化测试程序时使用的一个函数来演示这个遍历并查询控件的功能。

首先,你可以创建一个.cs文件,例如我就创建一个文件Extensions.cs。它的内容如下:
using System.Collections.Generic;
using System.Web.UI;

static public class Extensions
{
    static public IEnumerable<T> Cast<T>(this Control ctrl) where T : Control
    {
        foreach (Control x in ctrl.Controls)
            if (x is T)
                yield return (T)x;

        foreach (Control x in ctrl.Controls)
            foreach (var r in Cast<T>(x))
                yield return r;
    }
}


这里使用.net3.0所具有的扩展方法技术为“任意”Control都增加了一个Cast<T>方法,这样就可以提供给Linq一个天然的数据集对象。

以上就是我们需要的所有技术!没有更多了。它可以遍历一个Control之下的所有子控件,不受INamingContainer接口限制。例如我们可以在某个页面中这样测试它:
    protected void Page_Load(object sender, EventArgs e)
    {
        var cs = from Button b in this.form1 where b.Text.StartsWith("B") select b;
        Page.ClientScript.RegisterStartupScript(this.GetType(), "result", "alert('找到" + cs.Count().ToString() + "个符合条件的按钮。');", true);
    }


(当然,不要忘记要using System.Linq命名空间)

通过一行代码,我们搜索到页面的Form下的所有以B字母打头的Button控件,并且在页面上显示出查询到的个数。

我在实际的asp.net程序中几乎从来不使用这种方法,因为使用FindControl就足够。我只是在自动化测试程序中使用,因为在程序不断开发过程中,控件设计是经常变化的,使用Linq可以用精炼的一行语句写出更清楚、用得更持久的代码,更加适合面对复杂的应用,例如自动化测试程序就是这样的应用。

162 个解决方案

#1


mark

#2


学习~

#3


关注 学习~!

#4


 from Button b in this.form1 where b.Text.StartsWith("B") select b;
这句什么意思啊

#5


向高手学习

#6


引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊


查询表单中以B开头的BUTTON控件

学习了。。挺强

#7


学习。

#8


学习中,谢谢

#9


有道理,学习

#10


学习就着接分

#11


uping

#12


引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊


Lambda Expression,Lambda表达式,C# 3.0新增的特性。

#13


收藏

#14


学习中

#15


呵呵,sp1234又出新东西了

好像sp1234是和linq杠上了,感觉这篇东西,应该是承接你上几遍的思路

具体用法上到挺有意思滴,感觉是把那个层级结构给“压扁”了,而且借用linq把那个查询条件给后置了,不错有点意思

#16


学习了

#17


Thank you!God bless you and God bless CSDN

#18


为什么好多编程高手都喜欢熊猫?这是为什么呐?

#19


帮楼主顶,有启发

#20


学习...Up

#21


学习,顶一个。

#22


linq 的妙用。哈哈!

#23


收藏了,

#24


牛,学习,收藏

#25


linq的妙用啊,哈哈

#26


学习,谢谢

#27


楼主有没有.net 2.0的代码的学习下?

#28


学习了一下

#29


学习

#30


收藏.

#31


学习先
SP123死盯着Linq不放了

#32


mark Study

#33


mark,学习下

#34


学习...学习...

#35


引用 6 楼 saisky 的回复:
引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊 
 

查询表单中以B开头的BUTTON控件 

学习了。。挺强


接分,学习了

#36


前来学习

#37


先标记下,好好的体会下前辈的代码

#38


mark

#39


好东西。
收藏了。

#40


先使用下

#41


学习。。支持。

#42


引用楼主 sp1234 的帖子:
好几个月没有发帖了,这次写一个简单的帖子,期望可以提高各位对asp.net等开发的兴趣。

在asp.net中,FindControl方法有其自己的含义,参见我在以前的一个帖子中的解释。

asp.net中使用FindControl有其严格的逻辑意义,超乎初学者的想象。过去我较多地去“纠正”对FindControl的认识问题,但是这种“错误”的理解如果要实现又该如何实现呢?我给出我在写自动化测试程序时使用的一个函数来演示这个遍历并查询控件的功能。


不会也支持

#43


楼主顶!

#44


楼主自己写的吗?
佩服呀。

#45


受教了

#46


顶起!!!

#47


学习

#48


学习加接分

#49


楼主牛B,接分

#50


又见楼主。收藏了先

#1


mark

#2


学习~

#3


关注 学习~!

#4


 from Button b in this.form1 where b.Text.StartsWith("B") select b;
这句什么意思啊

#5


向高手学习

#6


引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊


查询表单中以B开头的BUTTON控件

学习了。。挺强

#7


学习。

#8


学习中,谢谢

#9


有道理,学习

#10


学习就着接分

#11


uping

#12


引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊


Lambda Expression,Lambda表达式,C# 3.0新增的特性。

#13


收藏

#14


学习中

#15


呵呵,sp1234又出新东西了

好像sp1234是和linq杠上了,感觉这篇东西,应该是承接你上几遍的思路

具体用法上到挺有意思滴,感觉是把那个层级结构给“压扁”了,而且借用linq把那个查询条件给后置了,不错有点意思

#16


学习了

#17


Thank you!God bless you and God bless CSDN

#18


为什么好多编程高手都喜欢熊猫?这是为什么呐?

#19


帮楼主顶,有启发

#20


学习...Up

#21


学习,顶一个。

#22


linq 的妙用。哈哈!

#23


收藏了,

#24


牛,学习,收藏

#25


linq的妙用啊,哈哈

#26


学习,谢谢

#27


楼主有没有.net 2.0的代码的学习下?

#28


学习了一下

#29


学习

#30


收藏.

#31


学习先
SP123死盯着Linq不放了

#32


mark Study

#33


mark,学习下

#34


学习...学习...

#35


引用 6 楼 saisky 的回复:
引用 4 楼 zhulong1111 的回复:
from Button b in this.form1 where b.Text.StartsWith("B") select b; 
这句什么意思啊 
 

查询表单中以B开头的BUTTON控件 

学习了。。挺强


接分,学习了

#36


前来学习

#37


先标记下,好好的体会下前辈的代码

#38


mark

#39


好东西。
收藏了。

#40


先使用下

#41


学习。。支持。

#42


引用楼主 sp1234 的帖子:
好几个月没有发帖了,这次写一个简单的帖子,期望可以提高各位对asp.net等开发的兴趣。

在asp.net中,FindControl方法有其自己的含义,参见我在以前的一个帖子中的解释。

asp.net中使用FindControl有其严格的逻辑意义,超乎初学者的想象。过去我较多地去“纠正”对FindControl的认识问题,但是这种“错误”的理解如果要实现又该如何实现呢?我给出我在写自动化测试程序时使用的一个函数来演示这个遍历并查询控件的功能。


不会也支持

#43


楼主顶!

#44


楼主自己写的吗?
佩服呀。

#45


受教了

#46


顶起!!!

#47


学习

#48


学习加接分

#49


楼主牛B,接分

#50


又见楼主。收藏了先