1. 程式人生 > >ASP.NET技巧-正確使用Label控制元件

ASP.NET技巧-正確使用Label控制元件

ASP.NET技巧-正確使用Label控制元件

原文地址:

http://haacked.com/archive/2007/02/15/ASP.NET_Tip_-_Use_The_Label_Control_Correctly.aspx

然而,關於Never use the ASP.NET Label control,我的看法稍稍與他不同。我希望將其重寫為:

Never use the ASP.NET Label control when a Literal would do.

問題不是Label控制元件。問題是隻是僅僅把Label控制元件看成是Literal控制元件。

Label控制元件有一個特殊用法,作為表單輸入的標籤。例如,下面的圖片中有一個文字標籤和一個文字框。

讓我們看看如何使用Literal控制元件來建立這個簡單的表單(注意我從一個資原始檔中獲取值,因為我們都希望支援國際化,對吧?但是這也指出了我為什麼使用一個實際的控制元件而不只是直接輸入標籤)。

<asp:Literalid="label"Text="<%$ Resources:UserName %>"runat="server" /><asp:TextBoxid="textbox"runat="server"/>

當你點選Username上的單詞時發生了什麼?什麼也沒有發生。如果此時靠近literalTextbox得到焦點是不是非常好呢?下面是解決方法:

<asp:Label id="label" AssociatedControlId="textbox" 
Text="Username" runat="server" /> <asp:TextBox id="textbox" runat="server" />

現在,我們已經將label和文字控制元件關聯在一起。底層的HTML看起來就像這樣(為了討論而做了簡化):

<labelfor="textbox">Username</label><inputtype="textbox" name="textbox"value=""/>

這將標籤Username

和文字控制元件關聯起來,因此當我們點選標籤時,文字框就會獲得焦點。

那麼在這裡為什麼使用Label伺服器控制元件?為什麼不直接使用<label /> html標籤。

因為你不知道TextBox編譯時的客戶端id。那麼如果這兩個控制元件位於一個頁面內部的使用者控制元件內部,又會發生什麼呢?此時它們的ID會變得有點奇怪。

後記:

在關於這篇文章的評論中也有非常精彩的討論,我也摘錄了下來。

實際上,你也可以將label和任何其他型別的控制元件關聯起來,而不僅僅是textboxDropdowntext area也是如此。

Label另外兩個非常重要的屬性是AccessKeyTooltip,它們主要是為了便於訪問Label

而且你也可以使用checkbox控制元件的text屬性,這樣它將自動生成一個關聯label