ASP.NET 4在Web 窗体方面的改进
在Web 窗体方面, 4 做了以下几方面的改进。1. Page.MetaKeywords 和Page.MetaDescription 属性
MetaKeywords 和MetaDescription是Page类新增加的两个属性,使用它们可以设置页面对应的meta标记—keywords和description。
2. 为页面的各个控件启用视图状态
Control 类增加了一个新属性ViewStateMode ,可以使用该属性来启用单个控件的视图状态。
3. 支持最近引入的浏览器和设备
在 中,包含一项名为“浏览器功能”的功能,可用于确定用户使用的浏览器的功能。其中,浏览器功能由存储在HttpRequest.Browser 属性中的HttpBrowserCapabilities 对象表示,有关特定浏览器功能的信息由浏览器定义文件定义。
在 4 中,这些浏览器定义文件已更新为包含有关最近引入的浏览器和设备(如Chrome、BlackBerry 和iPhone等)的信息。附带的浏览器定义文件包括:blackberry.browser 、chrome.browser、Default.browser、firefox.browser、gateway.browser 、generic.browser、ie.browser、iemobile.browser、iphone.browser、opera.browser和safari.browser。
除此之外, 4 还提供了一项名为“浏览器功能提供程序”的新功能。它可用于构建一个提供程序,该提供程序还可用于编写自定义代码以确定浏览器功能。
4. 路由
4 增加了对使用Web 窗体进行路由的内置支持。路由是 3.5 SP1 引入的一项功能,通过此功能可将应用程序配置为使用对用户和搜索引擎有意义的URL,这样无须指定物理文件名。使用这项功能,可以使站点更友好,并增加站点内容被搜索引擎发现的概率。
例如,显示应用程序中产品类别的某个页面的URL 如下面的示例所示:
http://website/products.aspx?id=10通过路由功能,可以使用下面的URL呈现相同的信息:
http://website/products/software很显然,第二个URL 不仅能使用户了解将获得的内容,并且还可以显著提高在搜索引擎搜索结果中的排名。
5.设置客户端ID
在 4 中,所有的控件都增加了一个ClientIDMode属性。可以使用此属性来影响 用于生成控件的ClientID 值的算法,从而更加方便地控制控件客户端ID。该属性是一个枚举类型,它有四个枚举值,其原型如下面所示:
程序代码:
using System; namespace System.Web.UI { public enum ClientIDMode { Inherit = 0, AutoID = 1, Predictable = 2, Static = 3, } }
6. 在GridView 和ListView 控件中保持行选择
在 的早期版本中,行选择是基于页面的行索引进行的。例如,如果选择第一页上的第三行,当移至第二页时,则会自动选定第二页上的第三行。在大多数情况下,更理想的情况是不选择第二页上的任何行。
而在 4 中,它新增加了一个EnablePersistedSelection属性来支持持久化选择。启用此功能后,将基于行数据键选择项。这意味着,如果你选择第一页上的第三行,当移至第二页时,并不会选定第二页上的任何行。当再次返回第一页时,仍将选定第三行。其中,设置示例如下面所示:
<asp:GridView id="GridView1" runat="server" PersistedSelection="true"> </asp:GridView>
7. 使用CSS简化FormView 控件内容的样式设置
在 的早期版本中,FormView 控件使用项模板呈现内容。这使得在标记中进行样式设置十分困难,因为控件会呈现意外的表行和表单元格标记。而在 4 中,提供了属性RenderOuterTable ,当此属性设置为false时,则不会呈现表标记,这样也就更容易对控件内容应用CSS 样式。设置示例如下面的代码所示:
<asp:FormView ID="FormView1" runat="server" RenderTable="false">
8. 简化ListView 控件的布局
3.5 中引入的ListView 控件不仅具备GridView 控件的所有功能,同时还可以全面地控制输出。但是,该控件的早期版本要求在使用中指定布局模板LayoutTemplate ,如下面的示例代码所示:
程序代码:
<asp:ListView ID="ListView1" runat="server"> <LayoutTemplate> <asp:PlaceHolder ID="ItemPlaceHolder" runat="server"> </asp:PlaceHolder> </LayoutTemplate> <ItemTemplate> <% Eval("Name")%> </ItemTemplate> </asp:ListView>而在 4 中,简化了此控件的使用,可以不需要布局模板。即上面示例中的标记可以替换为下面的标记:
程序代码:
<asp:ListView ID99="ListView1" runat="server"> <ItemTemplate> <% Eval("Name")%> </ItemTemplate> </asp:ListView>
9. 使用QueryExtender控件筛选数据
我们知道,创建数据驱动的网页时,一项十分常见的任务就是数据筛选操作。筛选操作通过仅显示满足指定条件的记录,从数据源排除数据。通过筛选,可以在不影响数据集中的数据的情况下以多种方式查看这些数据。
以前,筛选操作通常要求创建Where 子句以应用于查询数据源的命令。但是,LinqDataSource 控件的Where 属性并不公开LINQ 中提供的全部功能。为了更便于筛选数据操作, 4 中新增加了一个新的QueryExtender 控件,该控件可通过声明性语法从数据源中筛选出数据。使用QueryExtender 控件有以下优点:
与编写Where 子句相比,可提供功能更丰富的筛选表达式。
提供一种LinqDataSource 和EntityDataSource 控件均可使用的查询语言。例如,如果将QueryExtender 与这些数据源控件配合使用,则可以在网页中提供搜索功能,而不必编写特定于模型的Where 子句或eSQL 语句。
可以与LinqDataSource 或EntityDataSource 控件配合使用,或与第三方数据源配合使用。
支持多种可单独和共同使用的筛选选项。
10. 对Web 标准和辅助功能的增强支持
控件的早期版本有时会呈现不符合HTML、XHTML 或辅助功能标准的标记。而在 4 中,消除了其中大部分异常情况。主要体现在以下几个方面:
(1)用于可禁用控件的CSS
在 3.5 中,当将某个控件的Enabled属性设置为false时,系统会将一个disabled 特性添加到呈现的HTML元素中。例如,下面的标记将创建一个已禁用的Label 控件:
<asp:Label id="Label1" runat="server" Text="已禁用的Label 控件" Enabled="false" />在 3.5 中,原有控件设置将生成以下HTML:
<span id="Label1" disabled="disabled">已禁用的Label 控件</span>而在HTML 4.01中,针对span元素将disabled特性视为无效。对于仅供显示的元素(如span), 浏览器通常支持呈现禁用的外观,但根据辅助功能标准,依赖于这种非标准行为的网页并不可靠。因此,对于这些仅供显示的元素,应使用CSS 指明已禁用的可视外观。在默认情况下, 4 将针对上面显示的控件设置生成以下HTML:
<span id="Label1" class="aspNetDisabled">已禁用的Label 控件 </span>当然,可以通过设置DisabledCssClass 属性来更改控件禁用时默认呈现的class特性的值。也就是说,如果要使用不同于“aspNetDisabled”默认值的类名,通常可以在Global.asax 文件的Application_Start 方法中放入代码来执行此操作,如下面的示例所示:
protected void Application_Start(object sender, EventArgs e) { WebControl.DisabledCssClass = "customDisabledClassName"; }现在的Label控件将生成以下HTML:
<span id="Label1" class="customDisabledClassName"> 已禁用的Label 控件</span>(2)用于验证控件的CSS
在 3.5 中,验证控件将默认颜色red 呈现为内联样式。例如,下面的标记创建一个RequiredFieldValidator 控件:
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Required Field" ControlToValidate="RadioButtonList1" />3.5 为验证程序控件呈现以下HTML:
程序代码:
<span id="RequiredFieldValidator1" style="color:Red;visibility:hidden;"> RequiredFieldValidator </span>默认情况下, 4 不会呈现将颜色设置为红色的内联样式。内联样式仅用于隐藏或显示验证程序,如下面的示例所示:
<span id="RequiredFieldValidator1" style"visibility:hidden;"> RequiredFieldValidator </span>因此, 4 不会自动以红色显示错误消息。
(3)用于隐藏字段Div元素的CSS
使用隐藏字段存储状态信息,如视图状态和控件状态,这些隐藏字段包含在div元素中。在 3.5 中,此div元素没有class特性或id特性。因此,影响所有div元素的CSS规则可能会在无意中导致此div变为可见状态。
为避免上面这种问题, 4 使用一个CSS类呈现隐藏字段的div元素,该类可用于将隐藏字段div与其他元素区分开来。呈现的HTML如下所示:
<div class="aspNetHidden">(4)用于Table 、Image和ImageButton控件的CSS
默认情况下,在 3.5 中,某些控件会将所呈现HTML 的border 特性设置为0。下面的示例显示了由 3.5 中的Table 控件生成的HTML:
<table id="Table2" border="0">Image控件和ImageButton 控件也会这样,但由于此设置完全没有必要,而且会提供应通过使用CSS 提供的可视格式设置信息,因此,在 4 中未生成该特性。
(5)用于UpdatePanel和UpdateProgress控件的CSS
在 3.5 中,UpdatePanel和UpdateProgress控件不支持expando 特性。因此,无法针对它们呈现的HTML 元素设置CSS 类。而在 4 中,这些控件已更改为接受expando 特性,如下面的示例所示:
<asp:UpdatePanel runat="server" class="myStyle"> </asp:UpdatePanel>下面是此标记呈现的HTML:
<div id="ctl00_MainContent_UpdatePanel1" class="expandoclass"> </div>(6)消除不需要的外部表在 3.5 中,FormView 、Login、PasswordRecovery与ChangePassword控件呈现的HTML 包装在一个table 元素中,该元素的用途是将内联样式应用于整个控件。
如果使用模板自定义这些控件的外观,则可以在你在模板中提供的标记中指定CSS 样式。在这种情况下,不需要额外的外部表。在 4 中,通过将新的RenderOuterTable 属性设置为false,可以避免呈现表。
(7)向导控件的布局模板
在 3.5 中,Wizard 和CreateUserWizard 控件可生成用于可视格式设置的HTML table 元素。在 4 中,可以使用LayoutTemplate 元素指定布局。如果这样做,将不生成HTML table 元素。在模板中,可创建占位符控件来指示应在该控件中动态插入项的位置。
(8)用于CheckBoxList 和RadioButtonList 控件的新增HTML格式设置选项
3.5 使用HTML 表元素为CheckBoxList和RadioButtonList控件的输出设置格式。为提供不使用表进行可视格式设置的替代方法, 4 为RepeatLayout 枚举增加了两个选项:
UnorderedList
此选项指定使用ul和li元素,而不是表对HTML输出进行格式设置。
OrderedList
此选项指定使用ol和li元素,而不是表对HTML输出进行格式设置。
(9)Table 控件的页眉和页脚元素
在 3.5 中,可通过设置TableHeaderRow 类和TableFooterRow 类的TableSection 属性将Table 控件配置为呈现thead和tfoot元素。而在 4 中,这些属性均默认设置为适当的值。
(10)Menu 控件的CSS 和ARIA支持
在 3.5 中,Menu 控件使用HTML table 元素进行可视化格式设置,在某些配置中无法通过键盘访问该控件。在 4 中,通过以下方法解决了这些问题,并提高了可访问性:
生成的HTML 具有无序列表(ul 和li 元素)的结构;
使用CSS 进行可视化格式设置;
菜单按照ARIA 标准实现键盘访问,可以使用箭头键在菜单项中进行导航;
ARIA 角色和属性特性将添加到生成的HTML 中。
Menu 控件的样式呈现在页面顶部的style 块中,而不是与呈现的HTML 元素内联呈现。如果要使用单独的CSS 文件以便于修改菜单样式,可以将Menu 控件的新的IncludeStyleBlock 属性设置为false,这样便不会生成样式块。
(11)用于HtmlForm控件的有效XHTML
在 3.5 中,HtmlForm 控件(由<form runat=“server”> 标记隐式创建)呈现的HTML form 元素同时具有name和id特性。但因为name 特性在XHTML 1.1 中已弃用,因此该控件在 4 中不会呈现name 特性。
(12)保留控件呈现中的向后兼容性
现有 网站中的代码可能会假定控件是以 3.5 中的方式呈现HTML。为避免在将该站点升级为 4 时出现向后兼容性问题,可以在升级站点后让 继续以 3.5 中的方式生成HTML。为此,可以在 4 网站的Web.config 文件中将pages 元素的controlRenderingCompatibilityVersion 特性设置为“3.5”,如下面的示例所示:
<system.web> <pages controlRenderingCompatibilityVersion="3.5"/> </system.web>如果省略上述设置,默认值将与网站的目标 版本相同。
[ 本帖最后由 holly2008 于 2010-11-4 19:00 编辑 ]