欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

Asp.Net中服务器控件ID属性详解

创建时间:2011年08月27日 23:13  阅读次数:(5161)
分享到:
在Web世界,ID这个属性真是无所不在。对于这个我们最常用最熟悉的ID属性,我们又真的了解多少呢?本章,小编就带你一起探索ID的详解。

在阅读本章前,请记住:
1,在Asp.Net页面中,任何一个服务器控件都必须且只能有一个ID属性。
2,在同一个页面中,任何一个ID都是唯一的,决对不会有重复的ID值。


下面我们开始详细了解ID属性:
我们使用的任何一个服务器控件的基类中,都定义了控件的标识--属性ID,定义如下:
public virtual string ID
{
get;
set;
}

对于服务器控件来说,同一个页面中ID必须是唯一的,因为这个ID被用来唯一标识与定位这个服务器控件,如果我们没有给ID赋值的话,.Net会自动给我们赋一个。

在实际项目中,我们会发现服务器控件还有一个ClientID的属性,这个是.Net自动生成的Html客户端ID,这个ClientID是服务器自动计算并赋值的,我们不能认为ClientID与ID相同,而且ClientID总是同一个值。在使用它时,我们应该用ClientID这个属性来获值。
ClientID定义如下:
public virtual string ClientID
{
get;
}

可以看出,这个是一个只读属性。

在实际项目中,我们经常会用到从父控件中的Controls集合中查找子控件,除了可以通过Controls集合的下标来查找外,我们也可以通过控件的ID来查找,控件的FindControl方法提供了这个功能:
public virtual Control FindControl(string id)

如果找到,返回子控件的引用,如时未找加,返回Null.

可能存在的问题:
仔细想想,因为ID必须是唯一的,如果我在一个数据控件的模板列中放置了一个服务器控件,那么我在后台只给这个控件赋了一个ID属性值,但数据控件在运行时可能会生成N多个该控件,那么,这些控件的ID怎么来保持唯一性呢?

这是因为,我们的数据控件都实现了INamingContainer接口,这个接口没有任何成员,它只是一个标识接口,它告诉服务器,所有继承了我的控件,都要为控件的子控件的ID前添加一个唯一的前缀,使所有子控件ID都不重复。

INamingContainer接口的定义如下:
public interface INamingContainer

当实现了这个接口这后,默认情况下,控件的子控件的ID都会由一个特殊分隔符分开的三部分组成:
父控件ID 分隔符 序列号 分隔符 我们定义的子控件ID

其中分隔符默认为"$",分隔符我们可以通过属性IdSeparator来获得,它的定义如下:
Protected char IdSeparator
{
get;
}

注意:这个分隔符是可以由我们自己重新定义的。

与这个属性相关的还有一个属性是ClientIDSeparator,用来定义生成客户端的ID的分隔符,它的定义如下:
Protected char ClientIDSeparator
{
get;
}

它的默认值是"_",这样我们就清楚了为什么我们页面的源代码中会有很多包含"_"的ID。

以上是小编对服务器控件ID的一些了解,希望对大家有所帮助。u z廭Km諎錧wQ0僛齹Y魐聣0Wubh堄~済 烺齹詋W
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 87+27=? 的结果(结果是:114)
结  果: