文章目錄
- 1.用於可禁用控制項的 CSS
- 2.用於驗證控制項的 CSS
- 3.用於隱藏欄位 Div 元素的 CSS
- 4.用於Table、Image 和 ImageButton 控制項的 CSS
- 5.用於UpdatePanel 和 UpdateProgress 控制項的 CSS
- 6.消除不需要的外部表格
- 7.嚮導控制項的布局模板
- 8.用於CheckBoxList 和 RadioButtonList 控制項的新增 HTML 格式設定選項
- 9.Table控制項的頁首和頁尾元素
- 10.Menu 控制項的 CSS 和 ARIA 支援
- 11.用於 HtmlForm 控制項的有效 XHTML
- 12.保留控制項呈現中的向後相容性
ASP.NET 控制項的早期版本有時會呈現不符合 HTML、XHTML 或協助工具功能標準的標記。ASP.NET 4 消除了其中大部分異常情況。
1.用於可禁用控制項的 CSS
在 ASP.NET 3.5 中,禁用某個控制項時,會將一個 disabled 屬性添加到呈現的 HTML 元素中。例如,下面的標記將建立一個已禁用的 Label 控制項:
<asp:Label id="Label1" runat="server"
Text="Test" Enabled="false" />
在 ASP.NET 3.5 中,原有控制項設定將產生以下 HTML:
<span id="Label1" disabled="disabled">Test</span>
在 HTML 4.01 中,針對 span 元素將 disabled 特性視為無效。它僅對 input 元素有效,因為它指定這些元素無法訪問。對於僅供顯示的元素(如 span),瀏覽器通常支援呈現禁用的外觀,但根據協助工具功能標準,依賴於這種非標準行為的網頁並不可靠。
對於僅供顯示的元素,應使用 CSS 指明已禁用的可視外觀。因此在預設情況下,ASP.NET 4 將針對上面顯示的控制項設定產生以下 HTML:
<span id="Label1" class="aspNetDisabled">Test</span>
通過設定 DisabledCssClass 屬性,可以更改控制項禁用時預設呈現的 class屬性的值。
2.用於驗證控制項的 CSS
在 ASP.NET 3.5 中,驗證控制項呈現將預設顏色 red 呈現為內聯樣式。例如,下面的標記建立一個 RequiredFieldValidator 控制項:
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Required Field" ControlToValidate="RadioButtonList1" />
ASP.NET 3.5 為驗證控制項呈現以下 HTML:
<span id="RequiredFieldValidator1"
style="color:Red;visibility:hidden;">RequiredFieldValidator</span>
預設情況下,ASP.NET 4 不會呈現將顏色設定為紅色的內聯樣式。內聯樣式僅用於隱藏或顯示驗證程式,如下面的樣本所示:
<span id="RequiredFieldValidator1"
style="visibility:hidden;">RequiredFieldValidator</span>
因此,ASP.NET 4 不會自動以紅色顯示錯誤提示。
3.用於隱藏欄位 Div 元素的 CSS
ASP.NET 使用隱藏欄位儲存狀態資訊,如檢視狀態和控制項狀態。這些隱藏欄位包含在 div 元素中。在 ASP.NET 3.5 中,此 div 元素沒有 class 屬性或 id 屬性。因此,影響所有 div 元素的 CSS 規則可能會在無意中導致此 div 變為可見狀態。為避免這種問題,ASP.NET 4 使用一個 CSS 類呈現隱藏欄位的 div 元素,該類可用於將包含隱藏欄位的div與其他元素區分開來。下面的樣本顯示了新類的值:
<div class="aspNetHidden">
4.用於Table、Image 和 ImageButton 控制項的 CSS
預設情況下在 ASP.NET 3.5 中,某些控制項會將所呈現 HTML 的 border 屬性設定為零。下面的樣本顯示由 ASP.NET 3.5 中的 Table 控制項產生的 HTML:
<table id="Table2" border="0">
Image 控制項和 ImageButton 控制項也會這樣。由於此設定沒有必要,而且會提供應通過使用 CSS 提供的可視格式設定資訊,因此在 ASP.NET 4 中未自動產生該屬性。
5.用於UpdatePanel 和 UpdateProgress 控制項的 CSS
在 ASP.NET 3.5 中,UpdatePanel 和 UpdateProgress 控制項不支援 expando 屬性。因此無法針對它們呈現的 HTML 元素設定 CSS 類。在 ASP.NET 4 中,這些控制項已更改為接受 expando 屬性,如下面的樣本所示:
<asp:UpdatePanel runat="server" class="myStyle"> </asp:UpdatePanel>
下面是此標記呈現的 HTML:
<div id="ctl00_MainContent_UpdatePanel1" class="expandoclass"> </div>
6.消除不需要的外部表格
在 ASP.NET 3.5 中,以下控制項呈現的HTML封裝在一個table元素中,該元素的用途是將內聯樣式應用於整個控制項:
如果使用模板自訂這些控制項的外觀,您則可以在模板中提供的標記中指定CSS樣式。在這種情況下,不需要額外的外部表格。在 ASP.NET 4 中,通過將新的 RenderOuterTable屬性設定為false,可以避免呈現表。
7.嚮導控制項的布局模板
在 ASP.NET 3.5 中,Wizard 和 CreateUserWizard 控制項可產生用於可視格式設定的 HTML table 元素。在 ASP.NET 4 中,可以使用 LayoutTemplate 元素指定布局。如果這樣做,將不產生 HTML table 元素。在模板中,可建立預留位置控制項來指示應在該控制項中動態插入項的位置。(這與 ListView 控制項的模板模型的工作方式類似。)
8.用於CheckBoxList 和 RadioButtonList 控制項的新增 HTML 格式設定選項
ASP.NET 3.5 使用 HTML 表元素為 CheckBoxList 和 RadioButtonList 控制項的輸出設定格式。為提供不使用表進行可視格式設定的替代方法,ASP.NET 4 為 RepeatLayout 枚舉增加了兩個選項:
9.Table控制項的頁首和頁尾元素
在 ASP.NET 3.5 中,可通過設定 TableHeaderRow類和TableFooterRow 類的 TableSection 屬性將 Table 控制項配置為呈現thead和tfoot元素。在 ASP.NET 4 中,這些屬性均預設設定為適當的值。
10.Menu 控制項的 CSS 和 ARIA 支援
在 ASP.NET 3.5 中,Menu 控制項使用的是HTML table 元素進行可視化格式設定,在某些配置中無法通過鍵盤來訪問該控制項。ASP.NET 4 通過以下方法解決了這些問題,並提高了可訪問性:
產生的 HTML 具有無序列表(ul 和 li 元素)的結構。
使用 CSS 進行可視化格式設定。
菜單按照 ARIA 標準實現鍵盤訪問。可以使用方向鍵在功能表項目中進行導航。
ARIA 角色和屬性特性將添加到產生的 HTML 中。(通過使用 JavaScript 添加的特性而不是直接將其包含在 HTML 中,以免產生的 HTML 產生標記驗證錯誤。)
Menu 控制項的樣式呈現在頁面頂部的 style 塊中,而不是與出現的 HTML 元素內聯出現。如果要使用單獨的 CSS 檔案來修改菜單樣式,可以將 Menu 控制項的新的 IncludeStyleBlock 屬性設定為 false,這樣便不會產生樣式塊。
11.用於 HtmlForm 控制項的有效 XHTML
在 ASP.NET 3.5 中,HtmlForm 控制項(由 <form runat="server"> 標記隱式建立)出現的 HTML form 元素同時具有 name 和 id 屬性。name 必性在 XHTML 1.1 中已棄用。因此,該控制項在 ASP.NET 4 中不會呈現 name 屬性。
12.保留控制項呈現中的向後相容性
現有的ASP.NET網站中的代碼可能會假定控制項是以 ASP.NET 3.5 中的方式呈現 HTML。為避免在將該網站升級為 ASP.NET 4 時出現向後相容的問題,可以在升級網站後讓 ASP.NET 繼續以 ASP.NET 3.5 中的方式產生 HTML。為此,可以在 ASP.NET 4 網站的 Web.config 檔案中將 pages 元素的 controlRenderingCompatibilityVersion 屬性設定為“3.5”,如下面的樣本所示:
<system.web>
<pages controlRenderingCompatibilityVersion="3.5"/>
</system.web>
如果省略上述設定,預設值將與網站的目標 ASP.NET 版本相同。