ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

本文描述了 .NET Framework 2.0 的 ASP.NET Web 页面中被加入的重要变化与新特征。

页面外观

ASP.NET 页面增加了更多的选项来让你控制它们的外观。

控制页面

你可以通过创建控制页面和单独的内容页面来为多个页面创建一致的布局。控制页面定义了你想要在 Web 应用程序的页面中所共享的布局,导航和控件。控制页面同样可以包含适用于所有页面的代码。然后你就可以定义内容页面并且对该控制页面进行引用,然后在运行时把它们的内容与控制页面进行合并。关于更多信息,参考[ASP.NET 控制页面概览]。

主题

你现在可以使用 ASP.NET 主题来设计 Web 页面。主题就是一种控件属性设置集合(被称为皮肤),样式表单以及和你可以应用于页面或者 Web 站点的组成单位的图片。主题允许你定义可以应用于页面集合的式样,并且可以像分组一样进行更改。关于更多信息,参考[ASP.NET 主题与皮肤概览]。

页面行为

ASP.NET Web 页面还增加了一种新的特征来为你提供超越页面功能之外的已改进控件。

新的幕后代码模型

ASP.NET 继续支持把代码嵌入在 .aspx 页面的 script 块中的单文件模型。另外还引入了一个新的幕后代码模型,并且比较早版本 ASP.NET 中的幕后代码模型更加简单。新的幕后代码模型是基于局部类的,从而允许你定义类的一个部分,比如事件处理器,并且把代码保持在一个单独的文件中。局部类文件始终都会被编译成 .aspx 页面的一部分。

提示:新的幕后代码模型只能够在支持局部类的 .NET 编程语言中有效。而有些编程语言,比如 J#,就不支持局部类。

关于更多信息,参考[ASP.NET Web 页面模型中的新事物]。

视图状态和控件状态

在 ASP.NET 1.1 中,视图状态被用来存储控件状态信息,控件的内容,以及应用程序数据。开发者有时候需要禁用视图状态来减少在往返旅行期间所发送的数据量。但是,在 ASP.NET 1.1 中,禁用视图状态可能会导致一些控件丧失一些正常功能。

在 ASP.NET 2.0 中你可以在不破坏控件行为的前提之下禁用视图状态。控件需要跨越回传过程来保持状态并且在私有存储中保持它们自己的数据,从而被称作是控件状态。但是控件状态并不会存储完整的控件内容。例如,GridView 控件就不会在控件状态中存储所有的数据行内容。作为替代,控件状态只被用来存储控件完成回传时所最低限度的必需信息,从而减少了页面的尺寸。

在较早的 ASP.NET 版本中,如果你禁用了视图状态,那么你就必须重新生成被动态生成的控件内容。例如,如果你把控件绑定到数据,那么当你禁用了视图状态之后,你就必须在每次的回传过程中重新绑定控件和数据。

关于更多信息,参考[ASP.NET 视图状态]。

管理视图状态的尺寸

默认时,所有的视图状态信息都被存储在页面中一个单独的隐藏字段中。如果某个隐藏字段变得过于庞大,那么一些代理与防火墙就会阻止被提交的页面。如果视图状态信息超过了所指定的限制,那么页面就会自动创建额外的视图状态隐藏字段并且把信息分离到这些字段中。视图状态字段的分离与重新组装都是通过页面而自动被完成的。

保持页面状态

在 ASP.NET 2.0 中,你现在可以创建你自己的类来保持页面状态。默认时,页面会调用在页面的隐藏字段中存储信息的 PageStatePersister 类的实例,这一点与 ASP.NET 1.1 一样。然而用于移动设备的页面则会把页面状态存储进会话状态中从而减少将来的页面尺寸。通过创建基于抽象类 PageStatePersister 的派生类,你甚至可以创建属于你自己的机制来保存页面状态。

呈现 XHTML

默认时,ASP.NET 页面与控件都会呈现符合 XHTML 标准的各种标记。如果这样会导致你现有的应用程序工作不正常,那么你就可以禁用 XHTML 呈现。关于更多信息,参考[ASP.NET 与 XHTML]。

跨页面提交

在 ASP.NET 的较早版本中,Web 页面会在用户点击某个按钮或者其他提交控件的时候回传到它们自身。你现在可以配置页面来提交到其他的 ASP.NET Web 页面,因此对于创建多页面窗体来说是非常有用的。在目标页面中,你可以获得来自于源页面中的信息,比如控件的值。关于更多信息,参考[ASP.NET Web 页面中的跨页面提交]。

新的页面生命周期情景

如果要适应未来的新特征,比如控制页和主题,那么 Page 类就需要提供可用于页面生命周期的新方法和新事件。例如,Page 类现在支持一个可以用来动态设置主题或者控制页面的 PreInit 事件。关于更多信息,参考[Page 类]。

页面头访问

现在你可以从服务器代码中直接访问页面头。Page 对象暴露了一个 Header 属性来为你提供一种更简单的方式来操作已链接的样式表单、样式元素,元数据元素以及页面标题。

控件焦点

使用 Page 类中的方法(SetFocus 或者单独控件中的 Focus),你就可以对浏览器中哪个控件会在页面的呈现中拥有焦点而进行管理。ASP.NET Web 页面会利用这个新的功能在回传过程完成之后为了维持滚动位置而提供一种增强的能力。关于更多信息,参考[实践:设置 ASP.NET Web 服务器控件的焦点]。

创建客户端脚本

把客户端脚本注入到页面中的方法(例如,RegisterStartupScript)已经从 Page 类中移到了一个新的 ClientScriptManager 类中并且得到了增强。但是 Page 类中的方法仍然可以用于向后兼容,但是不赞成继续使用。这些方法的新版本中包括了一个允许你为相关联的脚本而指定类型的新参数。这样就可以允许你为页面和用户控件创建单独的脚本块。

关于更多信息,参考[拥有客户端脚本的 ASP.NET Web 页面编程]。

特定于浏览器的属性过滤

你现在可以为属性的值而创建浏览器过滤器。这样就允许你针对浏览器的不同而在相同的控件中指定不同的属性值。例如,你可以指定 Label 控件的 Text 属性针对于 Internet Explorer 和其他浏览器而拥有不同的值(可能是一个简略的字符串)。你可以过滤基于浏览器类型的属性值(比如,Mozilla,Ericksson 或者 Nokia)或者通过指定主流浏览器版本或者主流和二流浏览器版本(例如,Internet Explorer 4 或者 Ericksson P800 和 P800R101)。关于更多信息,参考[移动设备的 ASP.NET]。

客户端回调

你可以在不需要完整的往返旅行的情况下就可以完成页面中的服务器端处理。这就允许你从客户端脚本中请求基于服务器的信息。关于更多信息,参考[在 ASP.NET Web 页面中实现无需回传的客户端回调]。

posted on 2007-05-11 22:06  Laeb  阅读(1119)  评论(0编辑  收藏  举报