本主题包含以下各节:
ASP.NET 4 引入了多项可改进 ASP.NET 核心服务(例如,输出缓存和会话状态存储)的功能。
可扩展输出缓存
自 ASP.NET 1.0 发布之后,开发人员可以通过输出缓存将生成的页、控件和 HTTP 响应的输出存储在内存中。对于后续的 Web 请求,ASP.NET 可以从内存中检索生成的输出而不是从头开始重新生成输出,从而更快地提供内容服务。但此方法有一个限制,即生成的内容必须始终存储在内存中。在负担较大流量的服务器上,输出缓存的内存需求可能会与 Web 应用程序其他部分的内存需求产生冲突。
ASP.NET 4 为输出缓存增加了扩展性,使您能够配置一个或多个自定义输出缓存提供程序。输出缓存提供程序可使用任何存储机制保存 HTML 内容。这些存储选项包括本地或远程磁盘、云存储和分布式缓存引擎。
借助 ASP.NET 4 中的输出缓存提供程序扩展性,您可以为网站设计更主动且更智能的输出缓存策略。例如,可以创建这样一个输出缓存提供程序,该程序在内存中缓存站点流量“排名前 10”的页面,而在磁盘上缓存流量较低的页面。或者,也可以对所呈现页面的各种变化因素组合进行缓存,但应使用分布式缓存以减少前端 Web 服务器的内存消耗。
您可以将自定义输出缓存提供程序作为派生自新的 OutputCacheProvider 类型的类创建。随后,可以使用 outputCache 元素的新 providers 子部分在 Web.config 文件中配置该提供程序,如下面的示例所示:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
有关更多信息以及演示如何配置输出缓存的示例,请参见caching 的 outputCache 元素(ASP.NET 设置架构)。有关支持缓存的类的更多信息,请参见 OutputCache 和 OutputCacheProvider 类的相关文档。
默认情况下在 ASP.NET 4 中,所有 HTTP 响应、所呈现页面和控件均使用上例(其中 defaultProvider 特性设置为 AspNetInternalProvider)所示的内存中输出缓存。通过为 defaultProvider 指定不同的提供程序名称,可以更改用于 Web 应用程序的默认输出缓存提供程序。
此外,还可以针对各个控件和各个请求选择不同的输出缓存提供程序。要为不同的 Web 用户控件选择不同的输出缓存提供程序,最简便的方法是使用页面或控件指令中新的 providerName 特性以声明方式进行选择,如下面的示例所示:
要为某个 HTTP 请求指定不同的输出缓存提供程序,可以覆盖 Global.asax 文件中新的 GetOutputCacheProviderName 方法,以编程方式指定要用于特定请求的提供程序。下面的示例演示如何执行此操作。
预加载 Web 应用程序
某些 Web 应用程序在为第一项请求提供服务之前,必须加载大量数据或执行开销很大的初始化处理。在 ASP.NET 早期版本中,对于此类情况,必须采取自定义方法“唤醒”ASP.NET 应用程序,然后在 Global.asax 文件的 Application_Load 方法中运行初始化代码。
为应对这种情况,当 ASP.NET 4 在 Windows Server 2008 R2 上的 IIS 7.5 中运行时,提供了一种新的应用程序预加载管理器(自动启动功能)。预加载功能提供了一种可控方法,用于启动应用程序池,初始化 ASP.NET 应用程序,然后接受 HTTP 请求。通过这种方法,您可以在处理第一项 HTTP 请求之前执行开销很大的应用程序初始化。例如,可以使用应用程序预加载管理器初始化某个应用程序,然后向负载平衡器发出信号,告知应用程序已初始化并做好接受 HTTP 流量的准备。
若要使用应用程序预加载管理器,需要由 IIS 管理员通过使用 applicationHost.config 文件中的以下配置将 IIS 7.5 中的应用程序池设置为自动启动:
<applicationPools>
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>
由于一个应用程序池可包含多个应用程序,因此需要通过使用 applicationHost.config 文件中的以下配置分别指定要自动启动的各个应用程序:
<sites>
<site name="MySite" id="1">
<application path="/"
serviceAutoStartEnabled="true"
serviceAutoStartProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<serviceAutoStartProviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceAutoStartProviders>
如果 IIS 7.5 服务器冷启动或某个应用程序池已回收,IIS 7.5 将使用 applicationHost.config 文件中的信息确定哪些 Web 应用程序必须自动启动。对于每个标记为预加载的应用程序,IIS 7.5 将向 ASP.NET 4 发送一个请求以启动该应用程序使其处于一种状态,在该状态下该应用程序暂时无法接受 HTTP 请求。当应用程序处于这种状态时,ASP.NET 将对 serviceAutoStartProvider 特性(如前面的示例所示)定义的类型进行实例化并调入其公共入口点。
通过实现 IProcessHostPreloadClient 接口,可以创建具有所需入口点的托管预加载类型,如下面的示例所示:
初始化代码在 Preload 方法中运行并且该方法返回后,ASP.NET 应用程序便已做好处理请求的准备。
永久重定向页面
在应用程序的生存期内,Web 应用程序中的内容经常发生移动。这可能会导致链接过期,例如搜索引擎返回的链接。
在 ASP.NET 中,开发人员处理对旧 URL 的请求的传统方式是使用 Redirect 方法将请求转发至新的 URL。然而,Redirect 方法会发出 HTTP 302(“找到”)响应(用于临时重定向)。这会产生额外的 HTTP 往返。
ASP.NET 4 增加了一个 RedirectPermanent 帮助器方法,使用该方法可以方便地发出 HTTP 301(“永久移动”)响应,如下面的示例所示:
识别永久重定向的搜索引擎及其他用户代理将存储与内容关联的新 URL,从而消除浏览器用于临时重定向的不必要的往返。
会话状态压缩
默认情况下,ASP.NET 提供两个用于存储整个 Web 场中会话状态的选项。第一个选项是一个调用进程外会话状态服务器的会话状态提供程序。第二个选项是一个��� Microsoft SQL Server 数据库中存储数据的会话状态提供程序。
由于这两个选项均在 Web 应用程序的工作进程之外存储状态信息,因此在将会话状态发送至远程存储器之前,必须对其进行序列化。如果会话状态中保存了大量数据,序列化数据的大小可能变得很大。
ASP.NET 4 针对这两种类型的进程外会话状态提供程序引入了一个新的压缩选项。使用此选项,在 Web 服务器上有多余 CPU 周期的应用程序可以大大缩减序列化会话状态数据的大小。
可以使用配置文件中 sessionState 元素的新的 compressionEnabled 特性设置此选项。当 compressionEnabled 配置选项设置为 true 时,ASP.NET 使用 .NET Framework GZipStream类对序列化会话状态进行压缩和解压缩。下面的示例演示如何设置该特性。
从 ASP.NET 1.0 版开始,Web 窗体已成为 ASP.NET 中的核心功能。ASP.NET 4 在这方面做了许多改进,例如以下方面:
-
可以设置 meta 标记。
-
加强对视图状态的控制。
-
支持最近引入的浏览器和设备。
-
可以更方便地使用浏览器功能。
-
支持对 Web 窗体使用 ASP.NET 路由。
-
加强对生成的 ID 的控制。
-
可以将所选行保留在数据控件中。
-
加强对 FormView 和 ListView 控件中呈现的 HTML 的控制。
-
支持数据源控件的筛选。
-
对 Web 标准和辅助功能的增强支持
使用 Page.MetaKeywords 和 Page.MetaDescription 属性设置图元标记
Page 类增加了两个属性:MetaKeywords 和 MetaDescription。这两个属性表示所呈现 HTML 中与页面对应的 meta 标记,如下面的示例所示:
<head id="Head1" runat="server">
<title>Untitled Page</title>
<meta name="keywords" content="keyword1, keyword2' />
<meta name="description" content="Description of my page" />
</head>
这两个属性的工作方式与 Title 属性类似,可以在 @ Page 指令中对其进行设置。有关更多信息,请参见 Page..::..MetaKeywords 和 Page..::..MetaDescription。
为各个控件启用视图状态
Control 类增加了一个新属性:ViewStateMode。使用该属性,可以针对页面上未显式启用视图状态的所有控件禁用视图状态。
视图状态数据包含在页面的 HTML 中,在将页面发送至客户端和发回时会延长所用时间。存储多余的视图状态可能会导致性能显著降低。在 ASP.NET 的早期版本中,可通过禁用特定控件的视图状态来减轻视图状态对页面性能的影响。但是有时,与为多数不需要视图状态的控件禁用该状态相比,为少数需要视图状态的控件启用该状态更加简便。
有关更多信息,请参见 Control..::..ViewStateMode。
支持最近引入的浏览器和设备
ASP.NET 包含一项名为“浏览器功能”的功能,可用于确定用户使用的浏览器的功能。浏览器功能由存储在 HttpRequest..::..Browser 属性中的 HttpBrowserCapabilities 对象表示。有关特定浏览器功能的信息由浏览器定义文件定义。在 ASP.NET 4 中,这些浏览器定义文件已更新为包含有关最近引入的浏览器和设备(如 Google Chrome, Research in Motion BlackBerry 智能电话和 Apple iPhone)的信息。现有的浏览器定义文件也已更新。有关更多信息,请参见如何:将 ASP.NET Web 应用程序升级到 ASP.NET 4 和 ASP.NET Web 服务器控件和浏览器功能。
下面的列表显示了 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
定义浏览器功能的新方式
ASP.NET 4 包含一项称为“浏览器功能提供程序”的新功能。顾名思义,此功能可用于构建一个提供程序,该提供程序又可用于编写自定义代码以确定浏览器功能。
在 ASP.NET 3.5 版 Service Pack 1 中,需要在一个 XML 文件中定义浏览器功能。该文件位于计算机级文件夹或应用程序级文件夹中。大部分开发人员不需要自定义这些文件,但对于需要的人员,使用提供程序的方法比处理复杂的 XML 语法更为简便。通过提供程序方法可以简化进程,方法是实施一种通用浏览器定义语法或包含最新浏览器定义的数据库,甚至是用于此类数据库的 Web 服务。
有关新的浏览器功能提供程序的更多信息,请参见 What's New for ASP.NET 4 White Paper(ASP.NET 4 新增功能白皮书)。
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 文件以启用路由了。
有关路由的更多信息,请参见以下主题:
设置客户端 ID
新的 ClientIDMode 属性可方便用户编写引用服务器控件呈现的 HTML 元素的客户端脚本。Microsoft Ajax 的使用日益增多,因此需要进行此操作的情况越发常见。例如,您可能有一个用于呈现很长的产品价目表的数据控件,并且希望使用客户端脚本令 Web 服务在各个价格变化时对其进行调用和更新,而不刷新整个页面。
通常情况下,可使用 document.GetElementById 方法在客户端脚本中获得对 HTML 元素的引用。您需要将要引用的 HTML 元素的 id 特性值传递到该方法。对于 ASP.NET 服务器控件呈现的元素,ASP.NET 的早期版本可能难以甚至无法实现上述操作。您并非总能预测 ASP.NET 将生成的 id 值,而 ASP.NET 也可能生成很长的 id 值。对于将针对您标记中控件的单个实例生成多个行的数据控件,该问题特别难以解决。
ASP.NET 4 增加了两种用于生成 id 特性的新算法。这些算法可生成更易用于客户端脚本的 id 特性,因为它们的可预测性更强,并且由于更简单因而使用起来更方便。有关如何使用这些新算法的更多信息,请参见以下主题:
在数据控件中保持行选择
使用 GridView 和 ListView 控件,用户可选择一个行。在 ASP.NET 的早期版本中,行选择是基于页面的行索引进行的。例如,如果选择页面 1 上的第三个项,然后移至页面 2,则会选定页面 2 上的第三个项。在大多数情况下,更理想的情况是不选择页面 2 上的任何行。ASP.NET 4 支持持久化选择,这项新功能最初仅在 .NET Framework 3.5 SP1 中的动态数据项目中提供。启用此功能后,将基于行数据键选择项。这意味着,如果选择页面 1 上的第三个行,然后移至页面 2,则不会选定页面 2 上的任何内容。当您移回页面 1 时,仍将选定第三个行。与 ASP.NET 早期版本中的行为相比,这种行为自然得多。目前针对所有项目中的 GridView 和 ListView 控件支持持久化选择。例如,您可通过设置 EnablePersistedSelection 属性在 GridView 控件中启用此功能,如下面的示例所示:
FormView 控件增强功能
FormView 控件已改进,使用 CSS 简化了控件内容的样式设置。在 ASP.NET 的早期版本中,FormView 控件使用项模板呈现内容。这使得在标记中进行样式设置十分困难,因为控件会呈现意外的表行和表单元格标记。FormView 控件支持 ASP.NET 4 中的属性 RenderOuterTable。当此属性设置为 false 时(如下面的示例所示),不会呈现表标记。这样更容易对控件内容应用 CSS 样式。
有关更多信息,请参见 FormView Web 服务器控件概述。
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>
有关更多信息,请参见 ListView Web 服务器控件概述。
使用 QueryExtender 控件筛选数据
对于创建数据驱动的网页的开发人员,一项十分常见的任务就是筛选数据。该任务的传统执行方法是在数据源控件中生成 Where 子句。这种方法可能十分复杂,而且在某些情况下,通过 Where 语法无法充分利用基础数据库的全部功能。
为简化筛选操作,ASP.NET 4 中增加了一个新的 QueryExtender 控件。可以将此控件添加到 EntityDataSource 或 LinqDataSource 控件以筛选这些控件返回的数据。QueryExtender 控件依赖于 LINQ,但您无需了解如何编写 LINQ 查询即可使用该查询扩展程序。
QueryExtender 控件支持多种筛选选项。下表列出了 QueryExtender 的筛选选项。
术语 |
定义 |
---|---|
搜索一个或多个字段中的字符串值,并将这些值与指定的字符串值进行比较。 | |
在一个或多个字段中搜索由一对值指定的范围内的值。 | |
对指定的值与字段中的属性值进行比较。如果表达式的计算结果为 true,则返回所检查的数据。 | |
按指定的列和排序方向对数据进行排序。 | |
调用一个函数,用于定义页面中的自定义筛选器。 |
有关更多信息,请参见 QueryExtenderQueryExtender Web 服务器控件概述。
对 Web 标准和辅助功能的增强支持
ASP.NET 控件的早期版本有时会呈现不符合 HTML、XHTML 或辅助功能标准的标记。ASP.NET 4 消除了其中大部分异常情况。
有关各个控件呈现的 HTML 与辅助功能标准符合程度的详细信息,请参见 ASP.NET 控件和辅助功能。
用于可禁用控件的 CSS
在 ASP.NET 3.5 中,禁用某个控件时(请参见 WebControl..::..Enabled),会将一个 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 特性的值。
用于验证控件的 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 不会自动以红色显示错误消息。有关如何使用 CSS 为验证控件指定可视样式的信息,请参见在 ASP.NET 网页中验证用户输入。
用于隐藏字段 Div 元素的 CSS
ASP.NET 使用隐藏字段存储状态信息,如视图状态和控件状态。这些隐藏字段包含在 div 元素中。在 ASP.NET 3.5 中,此 div 元素没有 class 特性或 id 特性。因此,影响所有 div 元素的 CSS 规则可能会在无意中导致此 div 变为可见状态。为避免这种问题,ASP.NET 4 使用一个 CSS 类呈现隐藏字段的 div 元素,该类可用于将隐藏字段 div 与其他元素区分���来。下面的示例显示了新类 的值:
<div class="aspNetHidden">
用于 Table、Image 和 ImageButton 控件的 CSS
默认情况下在 ASP.NET 3.5 中,某些控件会将所呈现 HTML 的 border 特性设置为零 (0)。下面的示例显示由 ASP.NET 3.5 中的 Table 控件生成的 HTML:
<table id="Table2" border="0">
Image 控件和 ImageButton 控件也会这样。由于此设置没有必要,而且会提供应通过使用 CSS 提供的可视格式设置信息,因此在 ASP.NET 4 中未生成该特性。
用于 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>
消除不需要的外部表
在 ASP.NET 3.5 中,以下控件呈现的 HTML 包装在一个 table 元素中,该元素的用途是将内联样式应用于整个控件:
如果使用模板自定义这些控件的外观,则可以在您在模板中提供的标记中指定 CSS 样式。在这种情况下,不需要额外的外部表。在 ASP.NET 4 中,通过将新的 RenderOuterTable 属性设置为 false,可以避免呈现表。
向导控件的布局模板
在 ASP.NET 3.5 中,Wizard 和 CreateUserWizard 控件可生成用于可视格式设置的 HTML table 元素。在 ASP.NET 4 中,可以使用 LayoutTemplate 元素指定布局。如果这样做,将不生成 HTML table 元素。在模板中,可创建占位符控件来指示应在该控件中动态插入项的位置。(这与 ListView 控件的模板模型的工作方式类似。)有关更多信息,请参见 Wizard..::..LayoutTemplate 属性。
用于 CheckBoxList 和 RadioButtonList 控件的新增 HTML 格式设置选项
ASP.NET 3.5 使用 HTML 表元素为 CheckBoxList 和 RadioButtonList 控件的输出设置格式。为提供不使用表进行可视格式设置的替代方法,ASP.NET 4 为 RepeatLayout 枚举增加了两个选项:
-
UnorderedList.此选项指定使用 ul 和 li 元素而不是表对 HTML 输出进行格式设置。
-
OrderedList.此选项指定使用 ol 和 li 元素而不是表对 HTML 输出进行格式设置。
有关新选项呈现的 HTML 的示例,请参见 RepeatLayout 枚举。
Table 控件的页眉和页脚元素
在 ASP.NET 3.5 中,可通过设置 TableHeaderRow 类和 TableFooterRow 类的 TableSection 属性将 Table 控件配置为呈现 thead 和 tfoot 元素。在 ASP.NET 4 中,这些属性均默认设置为适当的值。
Menu 控件的 CSS 和 ARIA 支持
在 ASP.NET 3.5 中,Menu 控件使用 HTML table 元素进行可视格式设置,在某些配置中无法通过键盘访问该控件。ASP.NET 4 通过以下方法解决了这些问题,并提高了可访问性:
-
生成的 HTML 具有无序列表(ul 和 li 元素)的结构。
-
使用 CSS 进行可视格式设置。
-
菜单按照 ARIA 标准实现键盘访问。可以使用箭头键在菜单项中进行导航。(有关 ARIA 的信息,请参见 Visual Studio 和 ASP.NET 中的辅助功能。)
-
ARIA 角色和属性特性将添加到生成的 HTML 中。(通过使用 JavaScript 添加特性而不直接将其包含于 HTML 中,以免生成的 HTML 产生标记验证错误。)
Menu 控件的样式呈现在页面顶部的 style 块中,而不是与呈现的 HTML 元素内联呈现。如果要使用单独的 CSS 文件以便于修改菜单样式,可以将 Menu 控件的新的 IncludeStyleBlock 属性设置为 false,这样便不会生成样式块。
用于 HtmlForm 控件的有效 XHTML
在 ASP.NET 3.5 中,HtmlForm 控件(由 <form runat="server"> 标记隐式创建)呈现的 HTML form 元素同时具有 name 和 id 特性。name 特性在 XHTML 1.1 中已弃用。因此,该控件在 ASP.NET 4 中不会呈现 name 特性。
保留控件呈现中的向后兼容性
现有 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 版本相同。���有关 ASP.NET 中的多定向功能的信息,请参见 针对 ASP.NET Web 项目的 .NET Framework 多目标功能。)
ASP.NET MVC 通过使用模型-视图-控制器 (MVC) 模式降低了应用程序层之间的依赖性,从而帮助 Web 开发人员生成易于维护的基于标准的优秀网站。MVC 还提供对页标记的全面控制。另外,它在本质上支持测试驱动开发 (TDD),因而提高了可测试性。
使用 ASP.NET MVC 创建的网站具有模块化体系结构。这样,团队成员可独立处理各个模块,并且可用于提高协作质量。例如,开发人员可处理模型和控制器层(数据和逻辑),而设计人员负责处理视图(显示)。
有关教程、演练、概念性内容、代码示例和完全集成的 API 参考,请参见 ASP.NET 模型视图控制器 (MVC)。
动态数据是 2008 年中期在 .NET Framework 3.5 SP1 版本中引入的。此功能为创建数据驱动应用程序提供了许多增强功能,如:
-
快速生成数据驱动网站的 RAD 体验。
-
基于数据模型中定义的约束的自动验证。
-
可以使用属于动态数据项目中的字段模板轻松更改为 GridView 和 DetailsView 控件中的字段生成的标记。
ASP.NET 4 的动态数据得到了增强,为开发人员提供快速生成数据驱动网站的更强大功能。有关更多信息,请参见 ASP.NET 动态数据内容映射。
在现有 Web 应用程序中对单个数据绑定控件启用动态数据
可以在不使用基架的现有 ASP.NET Web 应用程序中使用动态数据功能,做法是对单个数据绑定控件启用动态数据。动态数据提供表示层和数据层支持,以呈现这些控件。对数据绑定控件启用动态数据时,您可以获得以下益处:
-
设置数据字段的默认值。动态数据能让您在运行时为数据控件中的字段提供默认值。
-
在不创建和注册数据模型的情况下与数据库交互。
-
不必编写任何代码而自动验证用户输入的数据
有关更多信息,请参见演练:在 ASP.NET 数据绑定控件中启用动态数据。
用于 URL 和电子邮件地址的新字段模板
ASP.NET 4 引入了两个新的内置字段模板 EmailAddress.ascx 和 Url.ascx。这些模板用于使用 DataTypeAttribute 特性标记为 EmailAddress 或 Url 的字段。对于 EmailAddress 对象,该字段显示为使用 mailto: 协议创建的超链接。当用户单击该链接时,将打开用户的电子邮件客户端并创建一条主干消息。类型为 Url 的对象显示为普通超链接。
下面的示例显示如何标记字段。
使用 DynamicHyperLink 控件创建链接
动态数据使用 .NET Framework 3.5 SP1 中增加的新的路由功能控制用户在访问网站时看到的 URL。使用新的 DynamicHyperLink 控件,可轻松生成指向动态数据站点中的页面的链接。
有关信息,请参见如何:在动态数据中创建表操作链接
数据模型中的继承支持
ADO.NET Entity Framework 和 LINQ to SQL 均在其数据模板中提供继承支持。例如,一个具有 InsurancePolicy 表的数据库。该数据库还可能包含与 InsurancePolicy 具有相同字段的 CarPolicy 和 HousePolicy 表,从而增加更多字段。动态数据已修改为了解数据模型中的继承对象,并支持继承表的基架。
有关更多信息,请参见演练:在动态数据中映射“每个层次结构一个表”继承。
多对多关系支持(仅限于 Entity Framework)
Entity Framework 为表之间的多对多关系提供了多种支持,这些支持是通过将关系公开为 Entity 对象的集合实现的。增加了新的字段模板(ManyToMany.ascx 和 ManyToMany_Edit.ascx),以便为显示和编辑多对多关系中涉及的数据提供支持。
有关更多信息,请参见在动态数据中处理多对多数据关系。
用于控制显示和支持枚举的新特性
增加了 DisplayAttribute,使您能够对字段显示方式进行更多控制。在动态数据的早期版本中,可使用 DisplayNameAttribute 特性更改用作字段标题的名称。新的 DisplayAttribute 类使您可以指定用于显示字段的更多选项,如字段显示的顺序和字段是否将用作筛选器。另外,该特性还提供对以下内容的独立控制:GridView 控件中用于标签的名称、DetailsView 控件中使用的名称、字段的帮助文本,以及用于字段的水印(前提是字段接受文本输入)。
增加了 EnumDataTypeAttribute 类,用于将字段映射到枚举。将此特性应用于字段时,需要指定枚举类型。动态数据使用新的 Enumeration.ascx 字段模板创建用于显示和编辑枚举值的 UI。该模板可将数据库中的值映射到枚举中的名称。
增强的筛选器支持
动态数据 1.0 具有用于布尔值列和外键列的内置筛选器。这些筛选器不允许您指定其显示顺序。新的 DisplayAttribute 特性使您可以控制列是否显示为筛选器以及它的显示顺序,从而解决了上述问题。
另一项增强功能是,筛选支持已重新编写为使用 Web 表单新的 QueryExtender 功能。这样,您可以直接创建筛选器,而无需具备将与筛选器一起使用的数据源控件的知识。除这些扩展功能外,筛选器还变为模板控件,允许您添加新的筛选器。最后,使用前面提到的 DisplayAttribute 类可以覆盖默认筛选器,这与使用 UIHint 覆盖列的默认字段模板的方法是相同的。
有关更多信息,请参见
通过 ASP.NET chart 服务器控件,可以创建包含用于复杂统计分析或财务分析的简单直观图表的 ASP.NET 应用程序。Chart 控件支持下列功能:
-
数据系列、图表区域、轴、图例、标签、标题,等等。
-
数据绑定。
-
数据操作,例如复制、拆分、合并、对齐、分组、排序、搜索和筛选。
-
统计公式和财务公式。
-
高级图表外观,例如三维、抗锯齿、照明和透视。
-
事件和自定义项。
-
交互性和 Microsoft Ajax。
-
支持 Ajax 内容传递网络 (CDN),该功能为您提供了将 Microsoft Ajax 库和 jQuery 脚本添加到 Web 应用程序的最佳方式。
有关更多信息,请参见 图表 Web 服务器控件概述。
现在,您可以使用 Microsoft Ajax 库创建完全基于客户端的 Ajax 应用程序。Microsoft Ajax 功能目前可为页面和组件开发人员实现客户端数据方案。要实现这些方案,必须下载并安装 Microsoft Ajax 库的最新版本,该版本是独立于 .NET Framework 4 和 Visual Studio 2010 发行的。可以通过访问 Microsoft Ajax 网站来下载 Microsoft Ajax 库的最新版本。
Microsoft Ajax 库的新版本包括下列功能:
-
可以通过服务器以 HTML 的形式呈现 JSON 数据。
-
提供客户端模板,使您可以仅使用基于浏览器的代码显示数据。
-
声明式客户端控件安装和行为。
-
提供客户端 DataView 控件,用于创建动态数据驱动的 UI。
-
数据与 HTML 元素或客户端控件之间的实时绑定。
-
客户端命令冒泡。
-
WCF 和 WCF 数据服务 与客户端脚本的完全集成,包括客户端更改跟踪。
有关更多信息,请参见 Microsoft Ajax。
以下各节提供有关 Visual Studio 2010 和 Visual Web Developer 学习版中的增强功能和新增功能的信息。
Visual Studio 2010 中的网页设计器已经过改进,提高了 CSS 兼容性,增加了对 HTML 和 ASP.NET 标记代码段的支持,并提供重新设计的用于 JScript 的 IntelliSense 版本。
提高 CSS 兼容性
Visual Studio 2010 中的 Visual Web Developer 设计器已更新,提高了 CSS 2.1 标准相容性。与 Visual Studio 的早期版本相比,该设计器可以更好地保留 HTML 源代码,而且更加可靠。
HTML 和 JScript 代码段
在 HTML 编辑器中,IntelliSense 可自动完成标记名称。IntelliSense Snippets 功能可自动完成完整标记等。在 Visual Studio 2010 中,针对 Visual Studio 的早期版本中支持的 JScript 及 C# 和 Visual Basic 提供 IntelliSense 代码段支持。
Visual Studio 2010 包含 200 多个代码段,可帮助您自动完成常见的 ASP.NET 和 HTML 标记,包括必需的特性(如 runat="server")和特定于标记的常见特性(如 ID、DataSourceID、ControlToValidate 和 Text)。
您可以下载其他代码段,也可以编写自己的代码段以封装您或您的团队用于常见任务的标记块。有关 HTML 代码段的更多信息,请参见演练:使用 HTML 代码段。
JScript IntelliSense 增强功能
在 Visual 2010 中,JScript IntelliSense 已经过重新设计,可提供更加丰富的编辑体验。IntelliSense 现在可识别由诸如 registerNamespace 的方法及其他 JavaScript 框架所用的类似技术动态生成的对象。分析大型脚本库和显示 IntelliSense 的性能已获得提升,几乎或完全没有处理延迟。兼容性显著提高,几乎支持所有第三方库,并支持各种编码风格。现在 IntelliSense 可在您键入文档注释时对其进行分析并立即利用。
对于 Web 应用程序项目,Visual Studio 现在提供与 IIS Web 部署工具 (Web 部署) 一起使用的工具,以实现在 ASP.NET 早期版本中必须手动完成的许多过程的自动化。例如,现在可以自动执行下列任务:
-
在目标计算机上创建 IIS 应用程序并配置 IIS 设置。
-
更改目标环境中必须更改的 Web.config 设置。
-
在目标环境中安装安全证书。
-
在目标环境中安装 GAC 中的程序集。
-
在目标环境中对 Windows 注册表进行必要的更改。
-
将更改传播到 Web 应用程序所用的 SQL Server 数据库中的数据或数据结构。
有关 Web 应用程序部署的更多信息,请参见ASP.NET 部署内容映射。
ASP.NET 4 为多定向功能增加了新的功能,使您可以更轻松地处理面向 .NET Framework 早期版本的项目。
多定向功能是在 ASP.NET 3.5 中引入的,使您能够直接使用 Visual Studio 的最新版本,而无需将现有网站或 Web 服务升级至 .NET Framework 最新版本。
在 Visual Studio 2008 中,当您处理面向 .NET Framework 早期版本的项目时,开发环境的大部分功能均适用于目标版本。但是,IntelliSense 显示的是当前版本中提供的语言功能,属性窗口显示的是当前版本中提供的属性。在 Visual Studio 2010 中,仅显示 .NET Framework 目标版本中提供的语言功能和属性。
本文网址:
http://msdn.microsoft.com/zh-cn/library/s57a598e(VS.100).aspx