天天看點

Lable和Literal控件的使用和差別

Lable和Literal這兩個控件是我們非常熟悉的兩個控件,都是用作内容呈現用的,但他們之間也有不同之處,分别應用于不同的地方。Lable控件會将内容呈現在html标簽span中,即Lable控件的Text屬性的值會包含在<span>标簽中。而Literal控件生成的代碼則比較幹淨,它的Text屬性的值将直接顯示在頁面中,看下面兩段代碼:

Lable:

Literal:

上面兩段程式運作的結果都如下圖:

Lable和Literal控件的使用和差別

再來看看上面的代碼生成的源碼:

Lable

Literal

從源碼中可以很清楚看出Lable最終在用戶端會生成Span标簽,而Literal則直接顯示文本,記得曾經維護過的一個自定義控件,在不同留言器中有樣式問題,調試很久最終發現就是Lable生成的Span惹的禍,最終換成Literal得以解決,是以後來但凡要顯示文本的地方我基本都是用Literal。不過Lable也不是一無是處,Lable控件有一個AssociatedControlID,可以将該屬性指向一個表單控件的ID,通常為TextBox,看下面代碼:

和上面的代碼基本一樣隻是添加了AssociatedControlID屬性,分别指向了兩個TextBox控件的ID,添加了這個屬性後生成的源碼就變了,如下:

可以看出有Span标簽變成了lable标簽 for屬性指向了TextBox的id。AssociatedControlID屬性的使用能夠給殘障人士帶來友善,如果使用讀屏器之類的輔助裝置來和網站進行互動,AssociatedControlID屬性能幫助輔助裝置将标簽和字段關聯起來。除此之外還有一個好處就是當點選标簽時,所關聯的TextBox就會獲得焦點。

由于Lable控件的内容最終呈現在Span标簽中,是以Lable控件也支援Span标簽的一些屬性,如BackColor,CssClass等。Literal控件不生成Span标簽,當然也不支援那些屬性,不過Literal控件有個Mode屬性,該屬性有三個值

Encode :在編碼Html内容後再顯示控件的内容

PassThrough :顯示控件的内容不進行編碼

Transform :清除一些不支援的标記後在呈現内容

看下面的代碼:

上面的三行代碼運作後的結果為:<hr/> 一條橫線 一條橫線。第三種如果是運作在行動電話這樣的不支援<hr/>的裝置中,将不會顯示橫線。

繼續閱讀