使用者控制項中使用客戶端指令碼的控制項名稱問題

2021-09-05 13:34:02 字數 960 閱讀 8971

使用者控制項中使用客戶端指令碼的控制項名稱問題

asp.net提供一種很好的模組級的復用技術――使用者控制項,大大方便了web**的建設,提高了效率。使用者控制項使用多了,碰到的問題也會增多。最近遇到乙個問題,就是如果在乙個使用者控制項中要使用到客戶端指令碼,而這個客戶端的指令碼又要訪問到控制項中包含的控制項,問題就出現了。問題是當乙個使用者控制項被包含到乙個aspx頁面後,呈現到使用者客戶端後,整個使用者控制項中的控制項的名稱將會有所變化,它們不再是你設計這個使用者控制項時的名稱,而是有兩個相關的名稱:

id ―― 客戶端可以通過這個id訪問這個客戶端控制項,asp.net給每個控制項輸出的id形式為「使用者控制項id_此控制項的id」,如果是使用者控制項巢狀的情況,形式為「頂層使用者控制項id_下層使用者控制項id_此控制項的id」

name ―― 客戶端也可以通過這個name來訪問這個客戶端控制項,asp.net給每個控制項輸出的name「使用者控制項id:此控制項的id」,如果是使用者控制項巢狀的情況,形式為「頂層使用者控制項id:下層使用者控制項id:此控制項的id」。

例子:在設計使用者控制項時,放置了乙個textbox,id為texbox1,這個使用者控制項被放置到乙個aspx頁面,使用者控制項的id為webusercontrol11,最後這個使用者控制項的textbox到客戶端後就是上面的這個樣子的了。

將這個使用者控制項拖放到乙個aspx頁面中,編譯瀏覽這個頁面,報乙個指令碼錯誤:缺少『;』

把滑鼠移到textbox時,又報乙個指令碼錯誤:「缺少物件」

檢查發現,客戶端引用的標示不能含有」:」符號,就是說在客戶端不能用控制項的name來參考。asp.net的webcontrol 和 htmlcontrol 的控制項還有個執行時屬性 clientid,它用來獲取由 asp.net 生成的伺服器控制項識別符號,也就是來獲取控制項的客戶端id的,我們再改用這個屬性來試一下:

document.all.<%= textbox1.clientid %>.value = "kent";

再執行,ok成功,當滑鼠移動textbox時,textbox中出現了「kent」。

客戶端插入控制項

本文中的控制項泛指任何合法的html標籤 方法一 容器 var strinnerhtml 要新增的控制項 docuemnt.all.form1.mydiv.innerhtml strinnerhtml 執行新增動作 方法二 容器 var strinnerhtml 要新增的控制項 執行新增動作 doc...

Webform 伺服器控制項與客戶端控制項

webform,即bs,瀏覽器應用。關於伺服器和客戶端,在webform 中,伺服器就相當於後台 也就是編輯c 的地方 客戶端相當於前台 也就是html頁面 用法 如果想在伺服器控制項裡呼叫客戶端控制項的js或jquery函式,必須在伺服器的控制項中加上onclientclick屬性 button1...

伺服器端控制項與客戶端控制項的區別

伺服器控制項的 在伺服器端解釋執行,生成根據使用者的瀏覽器而定的html元素。客戶端控制項由客戶端瀏覽器解釋執行。伺服器控制項需要回發執行,當首次開啟頁面時,需初始化。伺服器端控制項是由runat屬性指示的,runat的值有且僅為一值 server 通過新增runat屬性,一般的html控制項可以被...