程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 關於WebForms以及一些ASP.NET開發上的經驗(3)

關於WebForms以及一些ASP.NET開發上的經驗(3)

編輯:關於ASP.NET

四、生成復雜的ID難以使用JavaScript操作

我在上一篇文章的最後提到了,雖然使用WebForms我們能夠對於頁面上的HTML屬性和樣式等進行自由 的定制和控制,但是有一點是毋庸置疑的,我們沒有辦法(正常的辦法吧,Hack不算)讓服務器端控件在 客戶端生成一個簡單的ID。例如,一個TextBox控件,在服務器端的ID是txtUserName,但是最終在客戶端 生成的ID可能是LoginForm_txtUserName,因為它被放在一個ID為LoginForm的NamingContainer中。

有了組件模型,就出現了大量控件。控件最主要的目的之一就是復用,而復用的一個特點就是應該高 度內聚,而不依賴於外部環境。因此,為了使組件內部的服務器控件最終生成的客戶端ID能夠在頁面上唯 一,WebForms引入了NamingContainer這個概念。在NamingContainer中的服務器端控件最終在客戶端生成 的ID,會使用NamingContainer的“客戶端ID”作為前綴。如此“遞歸”的做法保證了服務器控件在客戶 端的ID唯一。

Web 2.0在業界風卷殘雲般的勢頭至今還未停歇,與其有密切相關的AJAX技術也被廣泛使用。AJAX技術 從根本上講,是一種在浏覽器中使用JavaScript實現的技術,因此使用JavaScript操作DOM元素的情況非 常多見。在非WebForms的頁面中我們可以編寫如下的代碼:

<input type="text" id="textBox" />
<script language="javascript" type="text/javascript">
  document.getElementById("textBox").value = "Hello World!";
</script>

但是由於NamingContainer的緣故,我們在使用WebForms的服務器端的控件時就可能無法通過textBox 在客戶端獲得文本框(生成的<input />元素)。為了解決這個問題,服務器端的控件模型提供了 一個ClientID屬性,通過這個屬性,我們就可以在服務器端得到控件最終在客戶端的ID。例如,如果上面 的代碼放在一個用戶控件裡的話,就一定必須寫成如下形式:

<%@ Control Language="C#" AutoEventWireup="true" %>
<asp:TextBox runat="server" ID="textBox" />
<script language="javascript" type="text/javascript">
  document.getElementById("<%= this.textBox.ClientID % >").value = "Hello World!";
</script>

此時,當控件被放到頁面上之後,它在客戶端生成的代碼則會是:

<input name="DemoControl1$textBox" type="text" id="DemoControl1_textBox" />
<script language="javascript" type="text/javascript">
   document.getElementById("DemoControl1_textBox").value = "Hello World"!;
</script>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved