浙林龙哥

   :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

ASP.NET 4.0新增的ClientIDMode是一項重大的更新,不知這是什 的話,可以在這裡看看。 預設ClientIDMode是Inherit 不過我想大多數人都會把焦點放在ClientIDMode=”Static”。

由於預設是Inherit,ClientIDMode會以預設的AutoID去制定Controls ID,或者有人會直接在Page Detective把ClientIDMode設定為”Static”供ClientIDMode去Inherit。

<%@Page ClientIDMode="Static"%>

那就不用每個WebControl都設定一次,但問題就來了,部份Third Party的WebControls未必能可以在Static ID下運作,特別是需要ClientScript做CallBack的,可能會找不到Render HTML後的ID。 目前至少AjaxControltoolKit中的AsyncFileUpload已經要設定ClientIDMode=”AutoID”才能正確運作。

而值得看看的是Predictable Mode,Predictable 主要是給Data Control使用,例如Repeater,DataList這些會重複Generate HTML Element的WebControls。 因為當你制定ItemTemplate時,你不可能期望每一項Item中的Controls ID都相同,同樣亦不合理,例如Repeater:

 <tr>
   <td>
     <span id="mySpan">Row1</span>
   </td>
 </tr>
 <tr>
   <td>
     <span id="mySpan">Row2</span>
   </td>
 </tr>

 

所以”Predictable”的出現就是給你設定ClientIDRowSuffix property,自行制定。其實我會建議在DataControl中ItemTemplate或EditTemplate下,所有Web Control都加上ClientIDMode為AutoID或者Predictable,即使設成AutoID感覺上很多餘,但基於有override的可能性,都是加上好一點。

或者ASP.NET老手已經深明這些道理,但剛學ASP.NET的話,亦無需要太追求簡短的ID,這類型ID,”ctl00_ContentPlaceHolder1_HideProductImage”,我們都習慣了。

posted on 2012-05-02 13:23 浙林龙哥 阅读(...) 评论(...) 编辑 收藏