ASP.NET 4新增功能(二) ASP.NET Web 窗体增强功能
从 ASP.NET 1.0 版开始,Web 窗体已成为 ASP.NET 中的核心功能。ASP.NET 4 在这方面做了许多改进,例如以下方面:
-
可以设置 meta 标记。
-
加强对视图状态的控制。
-
支持最近引入的浏览器和设备。
-
可以更方便地使用浏览器的功能。
-
支持对 Web 窗体使用 ASP.NET 路由。
-
加强对生成的 ID 的控制。
-
可以将所选行保留在数据控件中。
-
加强对 FormView 和 ListView 控件中呈现的 HTML 的控制。
-
支持数据源控件的筛选。
1.使用 Page.MetaKeywords 和 Page.MetaDescription 属性设置meta标记
Page类增加了两个属性:MetaKeywords和MetaDescription。这两个属性所表示的是HTML中的meta标记。如下面的示例所示:
<title>Untitled Page</title>
<meta name="keywords" content="keyword1, keyword2' />
<meta name="description" content="Description of my page" />
</head>
这两个属性的工作方式与Title属性相似,可以在@Page指令中对其进行设置。
2.为各个控件启用视图状态
Control 类增加了一个新属性:ViewStateMode。使用该属性,可以针对页面上未显式启用视图状态的所有控件禁用视图状态。视图状态数据包含在页面的HTML中,
视图状态数据包含在页面的 HTML 中,将会使页面的请求和响应延长所用时间。存储多余的视图状态将会导致性能显著降低。在 ASP.NET 的早期版本中,可通过禁用特定控件的视图状态来减轻视图状态对页面性能的影响。但是有时,与为多数不需要视图状态的控件禁用该状态相比,为少数需要视图状态的控件启用该状态更加简便。
3.支持最近引入的浏览器和设备
ASP.NET 包含一项名为“浏览器功能”的功能,可用于确定用户使用的浏览器的功能。浏览器功能由存储在 HttpRequest.Browser 属性中的 HttpBrowserCapabilities 对象表示。有关特定浏览器功能的信息由浏览器定义文件定义。在 ASP.NET 4 中,这些浏览器定义文件已更新为包含有关最近引入的浏览器和设备(如 Google Chrome, Research in Motion BlackBerry 智能电话和 Apple iPhone)的信息。现有的浏览器定义文件也已更新。
下面的列表显示了 ASP.NET 4 附带的浏览器定义文件:
blackberry.browser
chrome.browser
Default.browser
firefox.browser
gateway.browser
generic.browser
ie.browser
iemobile.browser
iphone.browser
opera.browser
safari.browser
4.定义浏览器功能的新方式
ASP.NET 4 包含一项称为“浏览器功能提供程序”的新功能。顾名思义,此功能可用于构建一个提供程序,该提供程序又可用于编写自定义代码以确定浏览器功能。
在 ASP.NET 3.5 版 Service Pack 1 中,需要在一个 XML 文件中定义浏览器功能。该文件位于计算机级文件夹或应用程序级文件夹中。大部分开发人员不需要自定义这些文件,但对于需要的人员,使用提供程序的方法比处理复杂的 XML 语法更为简便。通过提供程序方法可以简化进程,方法是实施一种通用浏览器定义语法或包含最新浏览器定义的数据库,甚至是用于此类数据库的 Web 服务。
5.ASP.NET 4 中的路由
ASP.NET 4 增加了对使用 Web 窗体进行路由的内置支持。路由是 ASP.NET 3.5 SP1 引入的一项功能,通过此功能可将应用程序配置为使用对用户和搜索引擎有意义的 URL,这样无需指定物理文件名。使用这项功能,可以提高站点的用户友好度,并增加站点内容被搜索引擎发现的概率。
例如,显示应用程序中产品类别的某个页面的 URL 如下面的示例所示:
http://website/products.aspx?categoryid=12
通过路由功能,可以使用下面的 URL 呈现相同的信息:
http://website/products/software
第二个 URL 使用户了解将获得的内容,并且可以显著提高在搜索引擎搜索结果中的排名。
新功能包括:
-
PageRouteHandler 类是一个用于定义路由的简单 HTTP 处理程序。您不必再编写自定义路由处理程序了。
-
HttpRequest.RequestContext 和 Page.RouteData 属性可方便用户访问 URL 参数中传递的信息。
-
The RouteUrl 表达式提供了在标记中创建路由 URL 的简单方法。
-
The RouteValue 表达式提供了提取标记中的 URL 参数值的简单方法。
-
-
RouteParameter 类便于将 URL 参数值传递到数据源控件的查询(类似于 FormParameter)。
-
您不必再更改 Web.config 文件以启用路由了。
6.设置客户端 ID
服务器控件新增加的ClientDMode属性可方便用户编写引用服务器控件呈现的HTML元素的客户端脚本。Microsoft Ajax的使用日益增多,因此需要进行此操作的情况是越来越多。例如,你可以有一个用于呈现很长的产品价目表的数据控件,并且希望使用客户端脚本令Web服务在各个价格变化时对其进行调用和更新,而不刷新整个页面。
通常情况下,可使用document.GetElementById方法在客户端脚本中获得对HTML元素的引用。你需要将引用的HTML元素的id属性值传递到该方法。对于ASP.NET服务器控件呈现的元素,ASP.NET的早期版本可能难以实现上述操作。并非总能预测ASP.NET将生成id值,而ASP.NET也可能生成很长的id值。
ASP.NET 4增加了两种用于生成id特性的新算法。这些算法可以生成更易用的客户端脚本的id,因为它们的可预测性更强,并且由于生成的更简洁因而使用起来更方便。
7.在数据控件中保持行选择
使用GridView和ListView控件时,用户可以选择一行。在ASP.NET的早期版本中,行选择是基于页面的行索引进行的。例如,如果选择页面1上的第三个项,然后移至页面2,则会选定页面2上的第三个项。在大多数情况下,更理想的情况是不选择页面2上的任何行。ASP.NET 4 支持持久化选择,这项新功能最初仅在.NET Framework 3.5 SP1中的动态数据项目中提供。启用此功能后,将基于行数据键选择项。这意味着,如果选择页面1上的第三行,然后移到页面2,则不会先定页面2上的任何内容。当您移回页面1时,仍将选定第三个行。与ASP.NET 早期版本中的行为相比,这种行为自然得多。目前针对所有项目中的GridView和ListView控件支持持久化选择。例如,您可以通过设置GridView控件中的EnablePersistedSelection属性启用此功能,如下面的示例所示:
<asp:GridView id="GridView2" runat="server" PersistedSelection="true">
</asp:GridView>
8.FormView 控件增强功能
ASP.NET 4对ForumView控件进行了改进,使用CSS简化了控件内容的样式设置。在ASP.NET的早期版本中,FormView控件使用项模板呈现内容。这使得在标记中进行样式设置十分困难,因为控件会呈现意外的表行和表单元格标记。FormView控件支持ASP.NET 4中的属性RenderOuterTable。当此属性设置为false时(如下面的示例所示),不会呈现表标记。这样更容易对控件内容应用CSS样式。
<asp:FormView ID="FormView1" runat="server" RenderTable="false">
9.ListView 控件增强功能
ASP.NET 3.5 中引入的 ListView 控件具备 GridView 控件的所有功能,同时使您可以全面控制输出。在 ASP.NET 4 中,简化了此控件的使用。该控件的早期版本要求您指定布局模板,其中包含一个具有已知 ID 的服务器控件。下面的标记显示了在 ASP.NET 3.5 中使用 ListView 控件的典型示例。
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
在 ASP.NET 4 中,ListView 控件不需要布局模板。上面示例中的标记可以替换为下面的标记:
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
10.使用 QueryExtender 控件筛选数据
对于创建数据驱动的网页的开发人员,一项十分常见的任务就是筛选数据。该任务的传统执行方法是在数据源控件中生成 Where 子句。这种方法可能十分复杂,而且在某些情况下,通过 Where 语法无法充分利用基础数据库的全部功能。
为简化筛选操作,ASP.NET 4 中增加了一个新的 QueryExtender 控件。可以将此控件添加到 EntityDataSource 或 LinqDataSource 控件以筛选这些控件返回的数据。QueryExtender 控件依赖于 LINQ,但您无需了解如何编写 LINQ 查询即可使用该查询扩展程序。
QueryExtender 控件支持多种筛选选项。下表列出了 QueryExtender 的筛选选项。
术语 |
定义 |
---|---|
SearchExpression |
搜索一个或多个字段中的字符串值,并将这些值与指定的字符串值进行比较。 |
RangeExpression |
在一个或多个字段中搜索由一对值指定的范围内的值。 |
PropertyExpression |
对指定的值与字段中的属性值进行比较。如果表达式的计算结果为 true,则返回所检查的数据。 |
OrderByExpression |
按指定的列和排序方向对数据进行排序。 |
CustomExpression |
调用一个函数,用于定义页面中的自定义筛选器。 |