[导读]全文介绍了ASP.NET 2.0中新增的控件和功能,包括Master Pages,Data Source控件、Skin的支持、GridView和Details View的引入,在此基础上,ASP.NET 2.0的安全模型得到了极大的提高,包括登录控件、角色管理器、个性化等等方面的支持,在类库方面也增加了许多新特性,如全新的代码分隔模型、客户端回调等等,让读者对于ASP.NET的新特性有一个全面的了解。 在首次公诸于众以来的短短四年中,ASP.NET业已成为在Windows倾力支持的服务器上运行的Web应用程序的金科玉律,并且将runat="server"添加到供世界各地Web开发人员使用的词汇表中。它还为人们所认识的Web编程的前景提供了一些启示:Web编程将以能够呈现HTML和脚本以及激发事件的服务器端控件为中心。
在Microsoft .NET Framework的下一个主要版本中,ASP.NET 2.0将摆脱某些不完善的状况并发展为一种完全成熟的产品。它的目标是将完成常见Web编程任务所需的代码数量减少70%或更多。尽管该目标非常宏大,但是由于多种多样的新增服务、控件和功能(它们一定会使ASP.NET 2.0像ASP.NET 1.x之于ASP一样,使ASP.NET 1.x显著提高),该目标是可以实现的。
这里,我将为您粗略介绍一些期望在ASP.NET 2.0中看到的内容,对于几个精选的领域进行深入讨论并且提供一些示例程序来强调关键的功能。所有代码示例均针对ASP.NET 2.0的预测试版本生成和测试的,可能需要对某些代码示例进行修改,以便用于第一个测试版本。
母版页(Master Pages) ASP.NET 1.x中最突出的缺点之一是它缺少对页面模板的支持。欠缺的是定义其他页面可以继承的“母版页”能力。开发人员通过使用用户控件(它们可以容易地在页面之间复制)创建页面来弥补这一缺陷。在ASP.NET 2.0中,由于加入了一个称作“母版页”的新增功能,所以不再需要这种技巧。想一想“可视化继承”,您就会理解母版页是干什么用的了。首先,您需要定义一个母版页(其中包含您希望在其他页面上显示的内容),并且使用ContentPlaceHolder控件来定义子页面可以将其内容插入的位置。然后,您需要生成子页面—SPX文件,它使用(类似于)如下所示的指令来引用母版页:
<%@ Page MasterPageFile="~/Foo.master" %>
在子页面中,您使用Content控件来填写母版页中的占位符。在浏览器中呈现子页面,出现的内容将是在母版页和子页面中所定义内容的完美组合。
<%@ Master %>
<html>
<body leftmargin="0" topmargin="0" rightmargin="0"
bottommargin="0" marginheight="0" marginwidth="0"
>
<!-- Banner -->
<table cellspacing="0" cellpadding="0"
style="background-image: url('images/stripes.gif');
background-repeat: repeat-x, repeat-y" width="100%"
>
<tr><td align="center">
<span style="font-family: verdana; font-size: 36pt;
font-weight: bold; color: white"
>
Master Pages
</span><br>
<span style="font-family: verdana; font-size: 10pt;
font-weight: normal; color: white"
>
This banner provided by Master.master
</span>
</td></tr>
</table>
<!-- Placeholder for content between banner and footer -->
<form id="Content">
<asp:ContentPlaceHolder ID="Main" RunAt="server" />
</form>
<!-- Footer -->
<table width="100%"><tr><td align="center">
<span style="font-family: verdana; font-size: 8pt; color: red">
Copyright (c) 2004 by Me Inc. All rights reserved<br>
This footer provided by Master.master
</span>
</td></tr></table>
</body>
</html>
Master.master
<%@ Page MasterPageFile="~/Master.master" %>
<asp:Content ContentPlaceHolderID="Main" RunAt="server">
<table width="100%" height="256px"><tr><td align="center">
<h2>This content provided by Subpage.aspx</h2>
</td></tr></table>
</asp:Content>
代码1 Subpage.aspx
代码1中所示的应用程序使用母版页来定义出现在每个页面上的页眉和页脚。子页面通过将Content控件插入母版页的ContentPlaceHolder中,从而在页眉和页脚之间插入内容。您应该注意匹配的ID和ContentPlaceHolderID,以及母版页中的@ Master指令。
母版页在ASP.NET对象模型中得到了充分支持。System.Web.UI.Page类的特点是具有一个名为Master的新属性,该属性使子页面可以用编程方式来引用它的母版页以及在其中定义的控件。母版页可以嵌套,并且可以包含能够在子页面中重写的默认内容。
<asp:ContentPlaceHolder ID="Main" RunAt="server">
This is default content that will appear in subpages unless explicitly overridden
</asp:ContentPlaceHolder>
此外,应用程序可以在Web.config中指定默认的母版页,如下所示:
<configuration>
<system.web>
<pages masterPageFile="~/Foo.master" />
</system.web>
</configuration>
单个子页面享有重写默认母版页和指定它们自己的母版页的自由。
最精彩的部分是Visual Studio 2005中对母版页的支持。当加载子页面时,IDE将显示母版页中定义的内容的灰色、只读版本,以及子页面中定义的内容的全色、完全可编辑版本。区分这两者很容易,并且如果要编辑属于母版页的内容,那么您需要做的全部事情只是在IDE中打开母版页。
有关母版页的更多深入内容,请参阅相关的文章。
数据源控件
数据绑定在ASP.NET 1.x中占据着显著位置。几行位置恰当的数据绑定代码可以取代大量查询数据库,并使用对Response.Write方法的重复调用,从而将查询结果转换为HTML内容的ASP代码。
下面的DataSource1.aspx页使用ASP.NET 2.0数据绑定来显示SQL Server Pubs数据库的一部分:
<html>
<body>
<form runat="server">
<asp:SqlDataSource ID="Titles" RunAt="server"
Connectio