ASP.NET 4新增功能(三) 对Web标准的支持和辅助功能的增强
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元素中,該元素的用途是將內聯樣式應用于整個控件:
-
FormView
Login
PasswordRecovery
ChangePassword
如果使用模板自定義這些控件的外觀,您則可以在模板中提供的標記中指定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 枚舉增加了兩個選項:
-
UnorderedList.此選項指定使用 ul 和 li 元素而并不是表對 HTML 輸出進行格式設置。
-
OrderedList.此選項指定使用 ol 和 li 元素而并不是表對HTML 輸出進行格式設置。
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 版本相同。
轉載于:https://www.cnblogs.com/longgel/archive/2010/06/03/1750707.html
總結
以上是生活随笔為你收集整理的ASP.NET 4新增功能(三) 对Web标准的支持和辅助功能的增强的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【读书笔记】泛型接口 和 泛型方法
- 下一篇: VS2010 IDE新特性随笔