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 版本相同。

posted @ 2010-06-03 13:48  longgel  阅读(2823)  评论(2编辑  收藏  举报