[VS2010] ASP.NET 4.0 – 操控Server控制項的ClientID

[VS2010] ASP.NET 4.0 – 操控Server控制項的ClientID

在之前的ASP.NET中,我們在Client端如果要控制Server控制項,通常要使用ClientID這個屬性來取得控制項的唯一值(id),例如:

<script type="text/javascript">
    function DoSomething(){
        alert('<%= Control.ClientID %>');
    }
</script>

這是為什麼呢?因為Server控制項被包在不同的框架之中(NamingContainer),為了讓他的id具有唯一性,所以.NET Framework動態的指定了Server控制項的id,例如:一個套用MasterPage的頁面,裡面宣告一個id為CustomerName的textbox控制項,最後網頁呈現的時候會出現「ctl00_ContentPlaceHolder1_CustomerName」。這讓我們在Client端操控物件的時候(ex: JavaScript, CSS),非常的不方便。

但在ASP.NET 4.0中,控制項多了特別的屬性可以設定,讓我們可以更彈性的使用Server控制項進行Client操作。那就是─「ClientIDMode」。

ClientIDMode一共提供了四種模式:

  • AutoID: 自動編碼(ex:ctl00_MainContent_SearchFilterText)
  • Inherit: 預設值,會繼承父框架的ID(ex:MainContent_SearchFilterText)
  • Static: 靜態,不更動;開發人員必需確保控制項id的唯一性
  • Predictable: 通常會配合ClientIDRowSuffix一起使用,ClientIDRowSuffix 屬性是用來做為後綴詞(ex:Gridview1_Label1_0),id的格式會符合[Prefix]_[ID]_[Suffix]

 

ClientIDMode = Inherit

image

ClientIDMode = AutoID

image

ClientIDMode = Static

image

ClientIDMode = Predictable, ClientIDRowSuffix = ID

image

ClientIDMode = Static + Predictable, ClientIDRowSuffix = ID

 

image

 

有了ClientIDMode,讓我們在使用Server控制項的時候,不管是利用JavaScript,或是CSS,都能夠更方便的取得自己想要的物件。

 

 

 

 

 

DotBlogs 的標籤: