使用者控制元件中使用客戶端指令碼的控制元件名稱問題 (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
提供一種很好的模組級的複用技術――,大大方便了網站的建設,提高了。使用者控制元件使用多了,碰到的問題也會增多。最近遇到一個問題,就是如果在一個使用者控制元件中要使用到客戶端指令碼,而這個客戶端的指令碼又要訪問到控制元件中包含的控制元件,問題就出現了。問題是當一個使用者控制元件被包含到一個頁面後,呈現到使用者客戶端後,整個使用者控制元件中的控制元件的名稱將會有所變化,它們不再是你設計這個使用者控制元件時的名稱,而是有兩個相關的名稱:
id ―― 客戶端可以透過這個id訪問這個客戶端控制元件,給每個控制元件輸出的id形式為“使用者控制元件id_此控制元件的id”,如果是使用者控制元件巢狀的情況,形式為“頂層使用者控制元件id_下層使用者控制元件id_此控制元件的id”
name ―― 客戶端也可以透過這個name來訪問這個客戶端控制元件,asp.net給每個控制元件輸出的name“使用者控制元件id:此控制元件的id”,如果是使用者控制元件巢狀的情況,形式為“頂層使用者控制元件id:下層使用者控制元件id:此控制元件的id”。
例子:
在設計使用者控制元件時,放置了一個TextBox,id為TexBox1,這個使用者控制元件被放置到一個aspx頁面,使用者控制元件的id為WebUserControl11,最後這個使用者控制元件的TextBox到客戶端後就是上面的這個樣子的了。
客戶端提交到服務端時是根據控制元件的name來提交的,也就是說,對服務端來講,客戶端的name是有意義的,id是不需要的。
在寫客戶端指令碼時你不能預知你的使用者控制元件將會是以什麼id加入到aspx頁面的,也不能預知使用者控制元件被巢狀了多少層,所以你根本不能在設計時來參考這些控制元件。
幸好,asp.net的webcontrol 和 htmlcontrol 的控制元件有個執行時屬性 UniqueID,用來獲取控制元件的唯一的、以分層形式限定的識別符號。對應到上面的那個例子,控制元件TextBox1的UniqueID就是“WebUserControl11:TextBox1”,跟生成的客戶端的控制元件的name相一致。
所以我們可以用控制元件的UniqueID來獲得執行時客戶端的name,也就能透過這個name來控制客戶端控制元件了。
OK,按照這個思路來設計個客戶端指令碼:
使用者控制元件很簡單,就放置一個TextBox,我們再給這個TextBox設定一個滑鼠經過事件來觸犯客戶端的指令碼,給TextBox賦一個值,程式碼如下:
" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.cs" Inherits="WebApplication3.WebUserControl1" TargetSchema=""%>
將這個使用者控制元件拖放到一個aspx頁面中,編譯瀏覽這個頁面,報一個指令碼錯誤:缺少‘;’
把滑鼠移到TextBox時,又報一個指令碼錯誤:“缺少”
檢查發現,客戶端引用的標示不能含有”:”符號,就是說在客戶端不能用控制元件的name來參考。asp.net的webcontrol 和 htmlcontrol 的控制元件還有個執行時屬性 ClientID,它用來獲取由 ASP.NET 生成的伺服器控制元件識別符號,也就是來獲取控制元件的客戶端id的,我們再改用這個屬性來試一下:
document.all..value = "kent";
再執行,OK成功,當滑鼠移動TextBox時,TextBox中出現了“kent”。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960501/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [WCF安全系列]談談WCF的客戶端認證[使用者名稱/密碼認證]客戶端密碼
- 在指令碼中呼叫cassandra客戶端命令指令碼客戶端
- 10G新特性:使用客戶端WALLET不用使用者名稱和密碼登陸遠端資料庫客戶端密碼資料庫
- MySQL客戶端中文亂碼問題。MySql客戶端
- 解決Asp.net中翻頁問題的自定義使用者控制元件 (轉)ASP.NET控制元件
- Mac下SVN客戶端CornerStone使用問題Mac客戶端
- 修改oracle中的使用者名稱和密碼Oracle密碼
- 使用者自定義控制元件拖拽失敗問題控制元件
- JAVA FTP客戶端問題JavaFTP客戶端
- 小程式iOS客戶端框架——控制元件事件邏輯框架與控制元件原生化iOS客戶端框架控制元件事件
- 小程式iOS客戶端框架—控制元件事件邏輯框架與控制元件原生化iOS客戶端框架控制元件事件
- 配置samba的訪問密碼和使用者名稱Samba密碼
- xfire 客戶端呼叫webservice的問題客戶端Web
- TSM客戶端的排程問題客戶端
- 破解本地 mysql 使用者名稱和密碼(轉)MySql密碼
- 【Error】vmware安裝centos提示 您已輸入使用者名稱,客戶機作業系統將保留此使用者名稱。ErrorCentOS作業系統
- linux samba配置問題(未知的使用者名稱或密碼錯誤)LinuxSamba密碼
- 客戶端tnsping不通問題客戶端
- ASP.Net中ListBox控制元件在客戶端修改後,提交出錯的解決ASP.NET控制元件客戶端
- .NET控制元件名稱縮寫一覽表控制元件
- 更改MYSQL使用者名稱密碼MySql密碼
- 根據教程中,輸錯密碼或使用者名稱後,卻不能返回‘使用者名稱或密碼錯誤’密碼
- iOS使用Shell指令碼批量修改類名稱iOS指令碼
- [轉載] 使用Redis的Java客戶端JedisRedisJava客戶端
- linux中記錄GIT使用者名稱密碼的方法LinuxGit密碼
- oracle客戶端同sap衝突的問題Oracle客戶端
- 控制元件treeview的使用 (轉)控制元件View
- BCB5:TrayIcon控制元件的使用、問題及對策 (轉)控制元件
- 使用ActiveX控制元件開發網頁常見的問題 (轉)控制元件網頁
- 錯誤的使用者名稱密碼登入導致的資料庫效能問題密碼資料庫
- MQTTJava客戶端的使用MQQTJava客戶端
- redis客戶端的使用Redis客戶端
- rsync客戶端一鍵安裝rsync指令碼(原始碼)客戶端指令碼原始碼
- 關於訪問資料庫的使用者名稱和密碼資料庫密碼
- 常見問題--oracle10g使用者名稱密碼以及登入方式Oracle密碼
- thinkphp中ajax使用者名稱校驗PHP
- git 使用者名稱密碼相關Git密碼
- 隱藏域 使用者名稱密碼密碼