惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Tor Project blog
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Latest news
Latest news
L
LINUX DO - 热门话题
罗磊的独立博客
T
Tenable Blog
The Hacker News
The Hacker News
美团技术团队
N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
云风的 BLOG
云风的 BLOG
S
Secure Thoughts
Cloudbric
Cloudbric
S
Security @ Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
U
Unit 42
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
爱范儿
爱范儿
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
P
Palo Alto Networks Blog
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
博客园 - 聂微东
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
F
Full Disclosure
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security Affairs
Project Zero
Project Zero

博客园 - Jun1st

Application之间共享Master Page ASP.NET AJAX 4的Client-Side Template和DataView ASP.NET AJAX 4的Client-Side Template和DataView 体验ASP.NET 4之URL Routing 使用Extension Methods来使IDataReader更加方便 Custom WCF Configuration File USE HttpRuntime.Cache OVER HttpContext.Current.Cache Make Asynchronous Calls from Page IIS and VS Embedded Local Web Server Integrate jQuery with ASP.NET Data Controls Tech-Ed 2008 上海 ASP.NET MVC的分页和导航 LINQ and Pipeline Pattern Why Would a .Net Programmer Learn Ruby On Rails(翻译) ASP.NET MVC之AJAX Asp.Net MVC---Walkthrough Asp.Net MVC 入门篇——Overview Asp.Net 2.0之SqlCacheDependency Security Basics and ASP.NET Support(翻译)
体验ASP.NET4之ClientID
Jun1st · 2009-10-26 · via 博客园 - Jun1st

2009-10-26 23:17  Jun1st  阅读(2577)  评论()    收藏  举报

在ASP.NET中,我们赋给一个服务器端控件的ID值,并非真正这个控件在浏览器中展现时的Html的ID值,Framework会默认把父控件的ID值用”_”区分附加到自己的ID前面,因此我们在Html中看到的ID值通常是这个样子的:”ctl0_UserControl1_ctl01_Textbox1“。

这一ID的生成方式对于后台代码来说,并没有什么影响,但是却给客户端的操作带来了很多的不便。比如,我们不能直接在javascript和css代码中直接使用”Textbox1”这一ID。在JS代码中,我们需要使用ClientID这一属性。而对于CSS,则需要使用控件的CssClass属性来work around这一问题。

好了,现在ASP.NET 4给我们带来了ClientIDMode这一属性,通过设置这个Mode,我们可以控制”ClientID”的生成方式

四种Model

  1. Legacy: ClientIDMode的default值,这时的ClientID值就是经典的“ctl0_UserControl1_ctl01_Textbox1”
  2. Inherit:这个是每一个控件的默认的行为,它会继承它的父控件的mode属性
  3. Static :顾名思义,控件的ID值就是最终的ClientID值。因此,如果在一个repeating的控件中使用这一个属性,就得负责保证ClientID的唯一性
  4. Predictable:相对来说这个属性比较复杂。在Predictable模式下,生成的ClientID值得模式是:[Prefix]_[ID]_[Suffix]

Legacy Model

在Legacy模式下生成的ClientID就是我们最为熟悉的,如”ctl0_UserControl1_ctl01_Textbox1”。

Inherit Model

在控件没有设置ClientIDMode值是,它的default值为Legacy。但是,子控件会默认继承父控件的Mode值,如果父控件的Mode值不为Legacy,那么子空间的Mode值就修改为父控件的值

Static Model

当控件的ClientIDMode值为Static时,控件的ID就为最后我们通过view source看到的ID值

Predictable

Predictable mode经常被用在如ListView, DataList等这样的数据绑定控件上。[Prefix]_[ID]_[Suffix] 中的[Prefix]为父控件的ID,中间的[ID]就为自己的ID值,而这个[Suffix]就依情形而定了。在Predictable模式下,名为ClientIDRowSuffix的属性值可以用来设置这一Suffix,但是这个值必须为Data Key Collections中的一个。可以给ClientIDRowSuffix设置多个值,如ClientIDRowSuffix=“ProductID, Name”,这时生成的最终的ID值就是[Prefix]_[ID]_ProductID_Name。如果没有给ClientIDRowSuffix赋值(比如使用Repeater控件时),那么这一Suffix就是这时的RowIndex

理论讲完了,该是实践的时候了。借用一句经常在英文书上看到的一句: It’s time to get your hands dirty! 附上source code, 置底。

Summary

个人感觉,能够控制这个ClientID还是很值得推荐和使用的一个功能,尤其是在JS和CSS代码无处不在的Web时代,给我们开发人员带来很多的方便之处。而相对于url routing功能,这一功能率先被用到的概率应该会大得多。

Sample 需要用VS 2010 Beta2来打开