ASP.NET 控件的早期版本有時(shí)會(huì)呈現(xiàn)不符合 HTML、XHTML 或輔助功能標(biāo)準(zhǔn)的標(biāo)記。ASP.NET 4 消除了其中大部分異常情況。
在 ASP.NET 3.5 中,禁用某個(gè)控件時(shí),會(huì)將一個(gè) disabled 屬性添加到呈現(xiàn)的 HTML 元素中。例如,下面的標(biāo)記將創(chuàng)建一個(gè)已禁用的 Label 控件:
<asp:Label id="Label1" runat="server"
Text="Test" Enabled="false" />
在 ASP.NET 3.5 中,原有控件設(shè)置將生成以下 HTML:
<span id="Label1" disabled="disabled">Test</span>
在 HTML 4.01 中,針對(duì) span 元素將 disabled 特性視為無(wú)效。它僅對(duì) input 元素有效,因?yàn)樗付ㄟ@些元素?zé)o法訪問。對(duì)于僅供顯示的元素(如 span),瀏覽器通常支持呈現(xiàn)禁用的外觀,但根據(jù)輔助功能標(biāo)準(zhǔn),依賴于這種非標(biāo)準(zhǔn)行為的網(wǎng)頁(yè)并不可靠。
對(duì)于僅供顯示的元素,應(yīng)使用 CSS 指明已禁用的可視外觀。因此在默認(rèn)情況下,ASP.NET 4 將針對(duì)上面顯示的控件設(shè)置生成以下 HTML:
<span id="Label1" class="aspNetDisabled">Test</span>
通過設(shè)置 DisabledCssClass 屬性,可以更改控件禁用時(shí)默認(rèn)呈現(xiàn)的 class屬性的值。
在 ASP.NET 3.5 中,驗(yàn)證控件呈現(xiàn)將默認(rèn)顏色 red 呈現(xiàn)為內(nèi)聯(lián)樣式。例如,下面的標(biāo)記創(chuàng)建一個(gè) RequiredFieldValidator 控件:
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Required Field" ControlToValidate="RadioButtonList1" />
ASP.NET 3.5 為驗(yàn)證控件呈現(xiàn)以下 HTML:
<span id="RequiredFieldValidator1"
style="color:Red;visibility:hidden;">RequiredFieldValidator</span>
默認(rèn)情況下,ASP.NET 4 不會(huì)呈現(xiàn)將顏色設(shè)置為紅色的內(nèi)聯(lián)樣式。內(nèi)聯(lián)樣式僅用于隱藏或顯示驗(yàn)證程序,如下面的示例所示:
<span id="RequiredFieldValidator1"
style="visibility:hidden;">RequiredFieldValidator</span>
因此,ASP.NET 4 不會(huì)自動(dòng)以紅色顯示錯(cuò)誤提示。
ASP.NET 使用隱藏字段存儲(chǔ)狀態(tài)信息,如視圖狀態(tài)和控件狀態(tài)。這些隱藏字段包含在 div 元素中。在 ASP.NET 3.5 中,此 div 元素沒有 class 屬性或 id 屬性。因此,影響所有 div 元素的 CSS 規(guī)則可能會(huì)在無(wú)意中導(dǎo)致此 div 變?yōu)榭梢姞顟B(tài)。為避免這種問題,ASP.NET 4 使用一個(gè) CSS 類呈現(xiàn)隱藏字段的 div 元素,該類可用于將包含隱藏字段的div與其他元素區(qū)分開來(lái)。下面的示例顯示了新類的值:
<div class="aspNetHidden">
默認(rèn)情況下在 ASP.NET 3.5 中,某些控件會(huì)將所呈現(xiàn) HTML 的 border 屬性設(shè)置為零。下面的示例顯示由 ASP.NET 3.5 中的 Table 控件生成的 HTML:
<table id="Table2" border="0">
Image 控件和 ImageButton 控件也會(huì)這樣。由于此設(shè)置沒有必要,而且會(huì)提供應(yīng)通過使用 CSS 提供的可視格式設(shè)置信息,因此在 ASP.NET 4 中未自動(dòng)生成該屬性。
在 ASP.NET 3.5 中,UpdatePanel 和 UpdateProgress 控件不支持 expando 屬性。因此無(wú)法針對(duì)它們呈現(xiàn)的 HTML 元素設(shè)置 CSS 類。在 ASP.NET 4 中,這些控件已更改為接受 expando 屬性,如下面的示例所示:
<asp:UpdatePanel runat="server" class="myStyle"> </asp:UpdatePanel>
下面是此標(biāo)記呈現(xiàn)的 HTML:
<div id="ctl00_MainContent_UpdatePanel1" class="expandoclass"> </div>
在 ASP.NET 3.5 中,以下控件呈現(xiàn)的HTML包裝在一個(gè)table元素中,該元素的用途是將內(nèi)聯(lián)樣式應(yīng)用于整個(gè)控件:
FormView
Login
PasswordRecovery
ChangePassword
如果使用模板自定義這些控件的外觀,您則可以在模板中提供的標(biāo)記中指定CSS樣式。在這種情況下,不需要額外的外部表。在 ASP.NET 4 中,通過將新的 RenderOuterTable屬性設(shè)置為false,可以避免呈現(xiàn)表。
在 ASP.NET 3.5 中,Wizard 和 CreateUserWizard 控件可生成用于可視格式設(shè)置的 HTML table 元素。在 ASP.NET 4 中,可以使用 LayoutTemplate 元素指定布局。如果這樣做,將不生成 HTML table 元素。在模板中,可創(chuàng)建占位符控件來(lái)指示應(yīng)在該控件中動(dòng)態(tài)插入項(xiàng)的位置。(這與 ListView 控件的模板模型的工作方式類似。)
ASP.NET 3.5 使用 HTML 表元素為 CheckBoxList 和 RadioButtonList 控件的輸出設(shè)置格式。為提供不使用表進(jìn)行可視格式設(shè)置的替代方法,ASP.NET 4 為 RepeatLayout 枚舉增加了兩個(gè)選項(xiàng):
UnorderedList.此選項(xiàng)指定使用 ul 和 li 元素而并不是表對(duì) HTML 輸出進(jìn)行格式設(shè)置。
OrderedList.此選項(xiàng)指定使用 ol 和 li 元素而并不是表對(duì)HTML 輸出進(jìn)行格式設(shè)置。
在 ASP.NET 3.5 中,可通過設(shè)置 TableHeaderRow類和TableFooterRow 類的 TableSection 屬性將 Table 控件配置為呈現(xiàn)thead和tfoot元素。在 ASP.NET 4 中,這些屬性均默認(rèn)設(shè)置為適當(dāng)?shù)闹怠?
在 ASP.NET 3.5 中,Menu 控件使用的是HTML table 元素進(jìn)行可視化格式設(shè)置,在某些配置中無(wú)法通過鍵盤來(lái)訪問該控件。ASP.NET 4 通過以下方法解決了這些問題,并提高了可訪問性:
生成的 HTML 具有無(wú)序列表(ul 和 li 元素)的結(jié)構(gòu)。
使用 CSS 進(jìn)行可視化格式設(shè)置。
菜單按照 ARIA 標(biāo)準(zhǔn)實(shí)現(xiàn)鍵盤訪問??梢允褂眉^鍵在菜單項(xiàng)中進(jìn)行導(dǎo)航。
ARIA 角色和屬性特性將添加到生成的 HTML 中。(通過使用 JavaScript 添加的特性而不是直接將其包含在 HTML 中,以免生成的 HTML 產(chǎn)生標(biāo)記驗(yàn)證錯(cuò)誤。)
Menu 控件的樣式呈現(xiàn)在頁(yè)面頂部的 style 塊中,而不是與出現(xiàn)的 HTML 元素內(nèi)聯(lián)出現(xiàn)。如果要使用單獨(dú)的 CSS 文件來(lái)修改菜單樣式,可以將 Menu 控件的新的 IncludeStyleBlock 屬性設(shè)置為 false,這樣便不會(huì)生成樣式塊。
在 ASP.NET 3.5 中,HtmlForm 控件(由 <form runat="server"> 標(biāo)記隱式創(chuàng)建)出現(xiàn)的 HTML form 元素同時(shí)具有 name 和 id 屬性。name 必性在 XHTML 1.1 中已棄用。因此,該控件在 ASP.NET 4 中不會(huì)呈現(xiàn) name 屬性。
現(xiàn)有的ASP.NET網(wǎng)站中的代碼可能會(huì)假定控件是以 ASP.NET 3.5 中的方式呈現(xiàn) HTML。為避免在將該站點(diǎn)升級(jí)為 ASP.NET 4 時(shí)出現(xiàn)向后兼容的問題,可以在升級(jí)站點(diǎn)后讓 ASP.NET 繼續(xù)以 ASP.NET 3.5 中的方式生成 HTML。為此,可以在 ASP.NET 4 網(wǎng)站的 Web.config 文件中將 pages 元素的 controlRenderingCompatibilityVersion 屬性設(shè)置為“3.5”,如下面的示例所示:
<system.web>
<pages controlRenderingCompatibilityVersion="3.5"/>
</system.web>
如果省略上述設(shè)置,默認(rèn)值將與網(wǎng)站的目標(biāo) ASP.NET 版本相同。
聯(lián)系客服