
全面涵盖使ASP.NET应用程序高效运行的新工具
ASP.NET是微软提供的免费Web框架,通过使用HTML、CSS和JavaScript创建Web应用程序。本书针对ASP.NET 4.5做了全面修订,解释了ASP.NET的功能,并把One ASP.NET放在更大的环境下讨论。本书融合了专家团队建立和部署站点的丰富经验,以及经过实地测试的专业知识,同时涵盖ASP.NET 4.5提供的一组新工具,从而创建高效运行的ASP.NET应用程序。
前 言
ASP.NET 4.5是一种令人惊异的建立Web解决方案的技术。ASP.NET自从诞生之日起, 就引入了许多技术,成为当今最有竞争力的Web框架。ASP.NET 4.5建立在ASP.NET以前版本的基础之上,但它主要关注的是开发人员的工作效率。
本书将介绍ASP.NET的所有内容,除了论述新主题外,还列举了一些有关这些新技术在实际操作中运用的例子。
0.1 ASP.NET的过去、现在和未来
ASP.NET 4.5是该产品的另一个主要版本,建立在以前版本的基础之上,并带有新增的功能。该版本继续朝着如下方向前进:使ASP.NET开发人员成为Web领域最有效率的开发人员。在ASP.NET的每个版本中,Microsoft团队都把其目标设定为开发效率、管理、性能和可伸缩性。本书将讨论ASP.NET和.NET Framework中的新功能。
ASP.NET已推出10余年。它在第一次发布时,重点关注的是将使用VBScript或JScript创建ASP页面的现有Web编程模型转变为面向对象模型。为了帮助进行此转变,ASP.NET包含了几个服务器控件以封装常见的功能。
随着时间的流逝,开发人员开始需要更多地控制所显示的标记。于是,ASP.NET有了变化,出现了新的Web范型,诞生了ASP.NET MVC等技术。另一方面,ASP.NET Web窗体继续控制着开发的主要过程。因此,以前的几个ASP.NET版本把重点放在用服务器控件正确显示标记上。
但是,与大多数Microsoft团队一样,VS团队的发布周期也是2到3年,但ASP.NET团队跟不上Web技术的发展步伐。本书的第1章将详细解释ASP.NET团队如何更频繁地发布产品的带外(Out-Of-Band,OOB)版本,以处理这个两难的问题。该章还讨论ASP.NET团队的开源活动。实际上,许多ASP.NET技术都已经发布为真正的开源产品。
用ASP.NET进行Web开发是件很令人兴奋的事。
0.2 使用本书的要求
在使用本书中的示例时,最好安装Visual Studio 2012,但只安装Microsoft的Notepad或WebMatrix,以及.NET Framework 4.5附带的命令行编译器也可行。要运行本书的所有示例,需要:
● Windows 8、Windows 7、Windows Vista、Windows Server 2012或Windows Server 2008
● Visual Studio 2012(这会安装.NET Framework 4.5)
● SQL Server 2012、2008、2005或SQL Server Express Edition
使用ASP.NET 4.5时,并不需要安装Microsoft Internet Information Services (IIS),因为Visual Studio 2012包含内置的Web服务器IIS Express。即使没有SQL Server的完整版本,也不必担心。使用该数据库的许多例子都可以改为使用SQL Server Express Edition,可以从Internet上免费下载该数据库版本。
0.3 本书读者对象
本书介绍的是ASP.NET 4.5提供的新功能,并解释ASP.NET的基础知识。因此,读者应大致了解Web技术,如ASP.NET的以前版本或PHP等其他Web技术。如果读者具备Web编程的基础知识,阅读本书的内容就不会有什么问题。
如果读者是ASP.NET新手,就应首先阅读由Imar Spaanjaars编写的《ASP.NET 4.5入门经典(第7版),掌握ASP.NET的基础知识。
除了具备Web技术的相关知识之外,读者还应对基本的编程结构有一定的了解,例如变量、For Each循环、面向对象编程等。
那么,本书到底是适用于Visual Basic开发人员还是C#开发人员呢?这两类开发人员都可以阅读本书!如果示例代码的区别比较大,本书就会提供VB和C#两个版本的代码(VB版本的代码可从本书支持站点免费下载)。此时,为了简洁起见,会省略C#示例中的HTML标记。
0.4 本书内容
本书主要介绍ASP.NET 4.5,详细阐述该版本中包含的每个主要新功能。下面是每章的主要内容:
● 第1章“One ASP.NET”:扩展健康的Web生态系统,这是本书最有趣的章节之一。ASP.NET推出10余年后,已经成为最丰富的Web开发技术之一。本章描述了ASP.NET的未来规划,包括一个新的蓝图:One ASP.NET。
● 第2章“使用ASP.NET进行HTML5和CSS3设计”:Visual Studio 2012比较注重建立基于HTML5和CSS3的Web应用程序。本章将详细介绍如何高效地使用HTML5和CSS3设计ASP.NET应用程序。
● 第3章“ASP.NET Web窗体的结构”:本章介绍ASP.NET应用程序的架构,以及为单个ASP.NET页面提供的结构和架构。本章将描述如何使用Visual Studio 2012构建ASP.NET应用程序,讨论ASP.NET中的文件夹和文件,论述编译代码的方式以及如何执行跨页的传送过程。本章最后列出处理Visual Studio 2012中的类的简单方法。
● 第4~7章“控件”:将这4章放在一起是因为它们讨论的都是服务器控件或用户控件。这几章首先介绍服务器控件的概念及其在ASP.NET开发中的重要作用。除了讨论服务器控件的架构之外,还将深入探讨服务器控件在ASP.NET开发项目中的作用。第4章“ASP.NET服务器控件和客户端脚本”介绍使用服务器控件的基础知识,第5章“ASP.NET Web服务器控件”介绍最新ASP.NET版本中的控件,第6章“验证服务器控件”描述了一组特殊的服务器控件—— 用于验证的服务器控件。使用这些控件可以创建从初级到高级的表单验证。第7章“用户控件和服务器控件”描述了如何创建自己的服务器控件,以及如何在应用程序中使用它们。
● 第8~13章“数据访问”:这部分讨论数据访问。目前几乎所有的Web应用程序都至少与一种类型的数据源交互,这些章节讨论了从关系数据到JSON的所有数据访问。第8章“数据绑定”介绍一些在把数据发布给控件之前支持编程处理数据的底层功能。第9章“模型绑定”介绍绑定的基础知识,并将模型绑定应用于Web窗体。第10章“使用LINQ查询”介绍LINQ,以及如何在Web应用程序中高效地使用这个新功能。第11章“Entity Framework”讨论如何把对象从数据库映射到代码中。使用Visual Studio 2012可以可视化地设计实体数据模型。第12章“ASP.NET动态数据”描述动态数据如何快速、方便地从数据库中建立报表和数据输入应用程序。第13章“使用服务”指出了传统ASMX Web服务和新型Web API之前的区别。
● 第14章“提供程序模型概述”:ASP.NET内置的许多系统大大方便了开发人员的工作,显著提高了他们的效率。这些系统以“提供程序模型”为基础,提供程序模型是可扩展的。本章将概述提供程序模型,及其在ASP.NET 4.5中的用法。
● 第15章“扩展提供程序模型”:在介绍提供程序模型后,本章将探讨扩展ASP.NET 4.5中提供程序模型的方式,并回顾提供程序模型的几个扩展示例。
● 第16章“使用母版页”:母版页是ASP.NET技术中的一项强大功能,提供了创建模板页面的方式,该模板页面能用于整个应用程序,而不是单个页面。本章介绍这些模板的创建方式,以及如何把它们应用于ASP.NET应用程序中的内容页面。
● 第17章“站点导航”:显然,许多开发人员都不是简单地开发单个页面,而是创建应用程序。因此,他们需要的是能贯穿整个应用程序功能处理的机制,而不是只具有页面处理功能的机制。ASP.NET 4.5提供的一项应用程序功能就是站点导航系统,本章就介绍这个系统。底层的导航系统允许通过XML文件定义应用程序的导航结构,该系统引入了一整套全新的导航服务器控件来处理XML文件中的数据。
● 第18章“个性化”:开发人员总是在寻找存储与终端用户相关信息的方式。在存储了这些信息之后,这种个性化数据就可以用于用户以后的访问,或者用于获取同一应用程序中的其他页面。ASP.NET小组开发了一种存储这些信息的方式—— ASP.NET个性化系统。该系统的最大优点是,可以在web.config文件中配置系统的所有操作。
● 第19章“成员资格和角色管理”:本章介绍成员资格和角色管理系统,该系统用于简化向ASP.NET应用程序添加身份验证和授权的过程。这两个系统是可扩展的,使以前较复杂的身份验证和授权方式永远成为历史。本章主要讨论使用web.config文件控制这些系统的应用方式,以及使用底层系统的新服务器控件。
● 第20章“安全性”:本章讨论ASP.NET 4.5中除了成员资格和角色管理功能之外的安全性,深入研究ASP.NET技术中固有的身份验证和授权机制,以及HTTP访问类型和模拟。
● 第21章“状态管理”:ASP.NET是一种基于请求/响应的技术,因此状态管理和请求、响应的性能非常重要。本章介绍在ASP.NET开发领域中这两个相互独立并且都非常重要的主题。
● 第22章“高速缓存”:ASP.NET的本质是请求/响应,因此服务器上的高速缓存(存储以前生成的结果、图像和页面)对于ASP.NET应用程序的性能来说非常重要。本章介绍ASP.NET提供的一些高级高速缓存功能,包括ASP.NET 4.5中的SQL高速缓存禁用功能。本章还将介绍对象高速缓存以及对象高速缓存的可扩展性。
● 第23~27章“客户端开发”:这5章讨论最热门的技术领域—— 移动技术。消费者和商家都希望能进行实时的数据传递,设计流畅的应用程序可以在移动电话、平板电脑和功能全面的PC上运行。第23章“ASP.NET AJAX”介绍如何使用AJAX建立应用程序。第24章“AJAX控件工具集”回顾一系列可用于AJAX技术的控件。第25章“jQuery”概述JavaScript库jQuery。第26章“实时通信”比较提供传统实时通信的方式和使用HTML5 Web套接字或SignalR的现代方式,后者包含一套混合解决方案。第27章“开发移动网站”专门讨论更新客户端的方法,以提供更好的可移式客户端支持。
● 第28~33章“应用程序的配置和部署”。现在,读者应牢固地掌握了创建ASP.NET应用程序的技巧。这6章重点讨论应用程序的配置和优化,最后将部署应用程序。第28章“配置”讲述如何使用各种配置文件修改ASP.NET的功能和操作方式。第29章“调试和错误处理技术”描述如何在应用程序中正确构建结构化错误处理机制,还将说明如何使用各种调试技术查找应用程序可能包含的错误。第30章“模块和处理程序”介绍ASP.NET处理HTTP请求的两种方法—— HttpModule和HttpHandler。这两种方法都提供了对ASP.NET底层处理过程的独特访问级别。第31章“异步通信”讨论了从客户端到服务器上某方法的单向通信,以及从客户端到宿主服务的单向通信。第32章“国际化应用程序的建立”介绍构建国际化的Web应用程序时应考虑的一些重要事项。第33章“打包和部署ASP.NET应用程序”进一步介绍构建过程,说明如何打包ASP.NET应用程序以便于部署。
● 第34章“ASP.NET MVC”:ASP.NET MVC使许多开发社区兴奋不已。ASP.NET MVC提供了使用MVC(Model-View-Controller,模型-视图-控制器)模式创建ASP.NET应用程序的方法,许多开发人员都对该模式充满期待。ASP.NET MVC为应用程序提供了可测试性、灵活性和可维护性。注意,ASP.NET MVC并不是人们熟知和喜欢的ASP.NET架构的替代物,而是构建ASP.NET应用程序的另一种方式。
● 第35章“ASP.NET Web Pages和Razor”:ASP.NET Web Pages是一项较新的技术,允许开发人员使用Razor语法建立交互式的Web应用程序。本章概述如何使用Microsoft WebMatrix建立Web Pages应用程序,还列出了一些较流行的帮助器,它们使用Razor语法显示有效的HTML和CSS。
● 附录A“迁移ASP.NET旧项目”:在一些情况下,要从头开始构建ASP.NET 4.5应用程序—— 新建所有的内容。但在许多情况下,并不需要这样做,而是需要迁移使用.NET Framework以前版本构建的ASP.NET应用程序,使它们能在.NET Framework 4.5上运行。
● 附录B“COM集成”:肯定有一些组件是用以前的技术创建的,且不希望重建它们,但希望把它们集成到新的ASP.NET应用程序中。此时,使用.NET Framework可以相当简单地把以前的COM组件集成到应用程序中。本附录还介绍如何建立.NET组件,而不是采用以前COM组件的体系结构。
● 附录C“ASP.NET终极工具”:本附录介绍ASP.NET开发人员可以使用的工具,其中有许多工具有助于加速开发过程。在许多情况下,还可以使读者成为更优秀的开发人员。
● 附录D“管理”:ASP.NET小组除了让开发人员在创建ASP.NET应用程序时更轻松、效率更高之外,还花费了大量的精力来简化应用程序的管理。过去,使用ASP.NET 1.0/1.1管理ASP.NET应用程序时,必须修改XML配置文件中的值。本附录将概述这个版本中的GUI工具,利用它们可以方便、高效地管理Web应用程序。
● 附录E“动态类型和语言”:随着 ASP.NET 4.5的发布,现在可以使用IronRuby和IronPython来创建应用程序。本附录简要介绍在创建Web应用程序的过程中应如何使用动态语言。
● 附录F“ASP.NET联机资源”:本附录列出了一些有价值的联机资源,便于读者进一步理解ASP.NET。
● 附录G“使用NuGet扩展Visual Studio”:VS 2012使用NuGet的Microsoft版本Package Manager提供了一个可扩展的模型。NuGet允许开发人员创建可发布的包来共享文件、文件夹和库,该包在公共种子或私有种子中可用。
0.5 源代码
在读者学习本书中的示例时,可以手动输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/或www.tupwk.com.cn/ downpage上下载。登录到站点http://www.wrox.com/,使用Search工具或使用书名列表就可以找到本书。接着单击Download Code链接,就可以获得所有的源代码。既可以选择下载一个大的包含本书所有代码的ZIP文件,也可以只下载某个章节中的代码。
在下载代码后,只需用解压缩软件对其进行解压缩即可。另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。记住,可以使用书中列出的程序清单的编号容易地找到所要寻找的代码,如“程序清单0-1”。
当为大多数可下载的源代码文件命名时,我们会使用这些清单中的数值。对于那些很少的没有用它自己的清单数值命名的程序清单,它们都与文件名匹配,所以很容易就可以在下载的源代码文件中找到它们。另外,还可以在www.wrox.com/go/SQLServer2012DataSets上下载本书使用的AdventureWorks和NorthWind数据库。
0.6 勘误表
尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的。如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫。当然,这还有助于提供更高质量的信息。
要在网站上找到本书英文版的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。
如果你发现的错误在我们的勘误表里还没有出现的话,请登录www.wrox.com/contact/ techsupport.shtml并完成那里的表格,把你发现的错误发送给我们。我们会检查你的反馈信息,如果正确,我们将在本书的勘误页面张贴该错误信息,并在本书的后续版本中加以修订。
0.7 p2p. wrox.com
要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这是个基于Web的系统,便于你张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给你传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。
在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:
(1) 进入p2p.wrox.com,单击Register链接。
(2) 阅读使用协议,并单击Agree按钮。
(3) 填写加入该论坛所需要的信息和自己希望提供的其他可选信息,单击Submit按钮。
你会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。
加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。
要想了解更多的有关论坛软件的工作情况,以及P2P和Wrox图书的许多常见问题的解答,就一定要阅读FAQ,只需在任意P2P页面上单击FAQ链接即可。
目 录
第Ⅰ部分 ASP.NET基础
第1章 One ASP.NET 3
1.1 One ASP.NET简介 3
1.1.1 ASP.NET的演变史 4
1.1.2 Web的演化史 5
1.2 简化复杂的生态系统 6
1.2.1 Web生态系统 7
1.2.2 起步是很简单的 8
1.2.3 整合生态系统是很简单的 8
1.2.4 真实示例 10
1.3 如何从One ASP.NET中获益 13
1.3.1 ASP.NET使起步很简单 13
1.3.2 ASP.NET支持Web
生态系统 13
1.3.3 ASP.NET更容易查找、添加、
更新站点的各个模块 14
1.3.4 ASP.NET帮助把一个框架的
概念应用于另一个框架 14
1.3.5 ASP.NET与Web的
发展一样快 14
1.4 本章小结 15
第2章 使用ASP.NET进行HTML5和
CSS3设计 17
2.1 警告 18
2.2 HTML5概述 18
2.2.1 HTML5中的新元素、特性
和值 19
2.2.2 使用新的HTML5标记 21
2.2.3 HTML5中新的API 23
2.3 CSS3概述 24
2.3.1 创建样式表 24
2.3.2 CSS规则 27
2.3.3 CSS继承 36
2.3.4 元素的布局和定位 37
2.3.5 CSS3中的新功能 43
2.3.6 HTML和CSS的兼容 47
2.4 在Visual Studio中使用
HTML和CSS 48
2.4.1 在Visual Studio中使用CSS 48
2.4.2 指定ASP.NET控件的样式 51
2.4.3 VS 2012中对HTML和
CSS的改进 53
2.4.4 Page Inspector 54
2.5 本章小结 55
第3章 ASP.NET Web窗体的结构 57
3.1 应用程序的位置选项 57
3.1.1 使用文件系统(IIS Express) 58
3.1.2 使用IIS 59
3.1.3 使用FTP 60
3.2 ASP.NET页面的结构选项 61
3.2.1 内联编码 61
3.2.2 隐藏代码模型 63
3.3 ASP.NET 4.5的Page指令 65
3.3.1 Page指令 66
3.3.2 Master指令 68
3.3.3 Control指令 69
3.3.4 Import指令 69
3.3.5 Implements指令 72
3.3.6 Register指令 72
3.3.7 Assembly指令 73
3.3.8 PreviousPageType指令 73
3.3.9 MasterType指令 74
3.3.10 OutputCache指令 74
3.3.11 Reference指令 75
3.4 ASP.NET的页面事件 75
3.5 处理回送 76
3.6 跨页面传送 77
3.7 ASP.NET应用程序文件夹 80
3.7.1 App_Code文件夹 80
3.7.2 App_Data文件夹 84
3.7.3 App_GlobalResources
文件夹 84
3.7.4 App_LocalResources
文件夹 84
3.7.5 App_WebReferences
文件夹 84
3.7.6 App_Browsers文件夹 85
3.8 编译 85
3.9 Build Provider 88
3.9.1 使用内置的Build Provider 90
3.9.2 使用自己的Build Provider 90
3.10 Global.asax 94
3.11 通过Visual Studio 2012
使用类 96
3.12 本章小结 99
第Ⅱ部分 控 件
第4章 ASP.NET服务器控件和
客户端脚本 103
4.1 ASP.NET服务器控件 103
4.1.1 服务器控件的类型 104
4.1.2 使用服务器控件构建页面 105
4.1.3 处理服务器控件的事件 106
4.2 给服务器控件应用样式 107
4.3 CSS在ASP.NET 4.5中的
改变 109
4.4 HTML服务器控件 109
4.4.1 HtmlControl基类 110
4.4.2 HtmlContainerControl类 111
4.4.3 所有的HTML类 111
4.4.4 使用HtmlGenericControl
类 113
4.5 识别ASP.NET服务器控件 114
4.6 通过JavaScript处理页面和
服务器控件 116
4.6.1 使用Page.ClientScript.
RegisterClientScriptBlock 117
4.6.2 使用Page.ClientScript.
RegisterStartupScript 118
4.6.3 使用Page.ClientScript.
RegisterClientScriptInclude 120
4.7 本章小结 120
第5章 ASP.NET Web服务器控件 121
5.1 Web服务器控件概述 121
5.2 Label服务器控件 122
5.3 Literal服务器控件 124
5.4 TextBox服务器控件 125
5.4.1 使用Focus()方法 125
5.4.2 使用AutoPostBack 126
5.4.3 使用AutoCompleteType 127
5.5 Button服务器控件 127
5.5.1 CausesValidation属性 128
5.5.2 CommandName属性 128
5.5.3 使用客户端JavaScript的
按钮 129
5.6 LinkButton服务器控件 130
5.7 ImageButton服务器控件 131
5.8 HyperLink服务器控件 131
5.9 DropDownList服务器控件 132
5.10 从集合中可视化地删除
数据项 134
5.11 ListBox服务器控件 135
5.11.1 允许用户选择多项 136
5.11.2 使用ListBox控件的
例子 136
5.11.3 给集合添加项 137
5.12 CheckBox服务器控件 138
5.12.1 如何确定复选框是否被
选中 139
5.12.2 给复选框赋值 139
5.12.3 排列复选框中的文本 140
5.13 CheckBoxList服务器控件 140
5.14 RadioButton服务器控件 142
5.15 RadioButtonList服务器控件 144
5.16 Image服务器控件 145
5.17 Table服务器控件 146
5.18 Calendar服务器控件 148
5.18.1 从Calendar控件中选择
日期 149
5.18.2 从Calendar控件中选择
要输出的日期格式 150
5.18.3 选择日期、星期或月份 150
5.18.4 使用日期范围 151
5.18.5 修改日历的样式和
操作方式 152
5.19 AdRotator服务器控件 155
5.20 Xml服务器控件 157
5.21 Panel服务器控件 157
5.22 PlaceHolder服务器控件 159
5.23 BulletedList服务器控件 160
5.24 HiddenField服务器控件 165
5.25 FileUpload服务器控件 166
5.25.1 使用FileUpload控件上传
文件 166
5.25.2 给上传文件指定正确的
ASP.NET权限 168
5.25.3 理解文件的大小限制 169
5.25.4 从同一个页面上传多个
文件 171
5.25.5 把上传的文件放在Stream
对象中 173
5.25.6 把文件内容从Stream对象
移到Byte数组中 173
5.26 MultiView和View服务器
控件 174
5.27 Wizard服务器控件 177
5.27.1 定制边栏导航 178
5.27.2 AllowReturn属性 179
5.27.3 使用StepType属性 179
5.27.4 给Wizard控件添加标题 180
5.27.5 使用向导的导航系统 181
5.27.6 使用Wizard控件的
事件 181
5.27.7 使用Wizard控件显示
窗体元素 183
5.28 ImageMap服务器控件 186
5.29 本章小结 188
第6章 验证服务器控件 189
6.1 有效性验证 189
6.2 客户端和服务器端的验证 190
6.3 ASP.NET验证服务器控件 191
6.3.1 验证原因 192
6.3.2 ASP.NET 4.5中的
隐含验证 192
6.3.3 RequiredFieldValidator
服务器控件 195
6.3.4 CompareValidator服务器
控件 199
6.3.5 RangeValidator服务器
控件 202
6.3.6 RegularExpressionValidator
服务器控件 205
6.3.7 CustomValidator服务器
控件 206
6.3.8 ValidationSummary服务器
控件 210
6.4 关闭客户端验证功能 213
6.5 为错误通知使用图像和声音 214
6.6 使用验证组 215
6.7 本章小结 218
第7章 用户控件和服务器控件 219
7.1 用户控件 219
7.1.1 创建用户控件 220
7.1.2 与用户控件交互 222
7.1.3 动态加载用户控件 222
7.2 服务器控件 226
7.2.1 Server Control项目 226
7.2.2 控件的特性 230
7.2.3 控件的显示 231
7.2.4 添加标记特性 234
7.2.5 关于控件ID 235
7.2.6 给HTML设置样式 236
7.2.7 添加客户端功能 238
7.2.8 浏览器功能 244
7.2.9 使用ViewState 246
7.2.10 引发回送事件 249
7.2.11 处理回送数据 251
7.2.12 复合控件 253
7.2.13 模板化控件 254
7.2.14 在设计期间创建控件 257
7.3 本章小结 268
第Ⅲ部分 数 据 访 问
第8章 数据绑定 271
8.1 数据源控件 271
8.1.1 SqlDataSource控件 273
8.1.2 AccessDataSource控件 278
8.1.3 LinqDataSource控件 278
8.1.4 EntityDataSource 控件 278
8.1.5 给复杂的过滤使用
QueryExtender 280
8.1.6 XmlDataSource控件 281
8.1.7 ObjectDataSource控件 282
8.1.8 SiteMapDataSource控件 283
8.2 数据源控件的高速缓存 284
8.3 数据绑定控件 284
8.3.1 GridView控件 284
8.3.2 编辑GridView中的
数据行 293
8.3.3 删除GridView数据 298
8.3.4 DetailsView控件 300
8.3.5 使用DetailsView插入、更新
和删除数据 302
8.3.6 ListView控件 303
8.3.7 FormView控件 309
8.4 其他数据绑定控件 312
8.4.1 TreeView控件 312
8.4.2 Menu控件 313
8.4.3 Chart控件 313
8.5 内联数据绑定语法 316
8.5.1 数据绑定语法 317
8.5.2 XML数据绑定 318
8.6 表达式和表达式生成器 318
8.7 本章小结 321
第9章 模型绑定 323
9.1 模型绑定 323
9.1.1 选择数据 324
9.1.2 分页 324
9.1.3 过滤 325
9.1.4 使用值提供程序 325
9.1.5 插入数据 326
9.1.6 更新数据 327
9.2 使用强类型化的控件 329
9.3 扩展模型绑定 330
9.3.1 定制的值提供程序 330
9.3.2 定制的模型绑定器 331
9.3.3 定制的ModelDataSource 332
9.4 本章小结 334
第10章 使用LINQ查询 335
10.1 LINQ to Objects 336
10.1.1 传统的查询方法 336
10.1.2 使用LINQ替代传统的
查询 338
10.1.3 使用LINQ分组数据 345
10.1.4 使用其他LINQ运算符 345
10.1.5 建立LINQ连接 346
10.1.6 使用LINQ分页数据 347
10.2 LINQ to XML 347
10.2.1 一个简单的LINQ to
XML示例 348
10.2.2 连接XML数据 350
10.3 LINQ to SQL 351
10.3.1 使用O/R映射器 351
10.3.2 访问和查询数据 353
10.3.3 使用其他SQL查询方法 356
10.3.4 通过LINQ插入、更新和
删除查询 358
10.4 LINQ to Entities 361
10.4.1 创建Entity Framework
数据模型 362
10.4.2 访问数据 363
10.4.3 编写LINQ查询 363
10.5 本章小结 365
第11章 Entity Framework 367
11.1 能否使用同一种语言 368
11.1.1 开发工作流选项 369
11.1.2 实体数据模型 369
11.2 创建第一个实体数据模型 370
11.2.1 使用EDM向导 371
11.2.2 使用Entity Framework
设计器 373
11.2.3 使用EDM建立ASP.NET
Web页面 374
11.3 理解关系 376
11.3.1 一对一和一对多关系 376
11.3.2 多对一和多对多关系 379
11.4 在EDM中使用继承功能 381
11.5 使用EntityDataSource控件 384
11.5.1 创建基本页面 384
11.5.2 配置数据源控件 385
11.6 Entity Framework Code First 387
11.6.1 创建Code First模型 387
11.6.2 约定-配置 390
11.6.3 Code First中的关系 391
11.6.4 Code First Migrations 392
11.7 本章小结 394
第12章 ASP.NET Dynamic Data 395
12.1 Dynamic Data功能 395
12.1.1 默认应用程序中创建的
核心文件 395
12.1.2 应用程序特性 396
12.1.3 运行应用程序 397
12.1.4 运行应用程序的结果 397
12.1.5 向已有页面中添加动态
数据 400
12.2 理解模型绑定 401
12.2.1 特性驱动的UI 401
12.2.2 特性驱动的验证 403
12.3 本章小结 404
第13章 使用服务 405
13.1 不同系统之间的通信 405
13.2 建立一个简单的XML Web
服务 407
13.2.1 WebService页面指令 408
13.2.2 Web服务的基类文件 409
13.2.3 把定制的DataSet显示为
SOAP 409
13.2.4 XML Web服务接口 411
13.3 使用简单的XML Web服务 413
13.3.1 添加Web引用 413
13.3.2 在客户端应用程序中
调用Web服务 415
13.4 重载WebMethod 417
13.5 高速缓存Web服务的响应 420
13.6 使用SOAP报头 421
13.6.1 使用SOAP报头建立
Web服务 421
13.6.2 通过SOAP报头使用
Web服务 422
13.6.3 使用SOAP 1.2请求Web
服务 424
13.7 异步使用Web服务 425
13.8 WCF 427
13.8.1 WCF概述 427
13.8.2 建立WCF服务 428
13.8.3 建立WCF使用者 433
13.8.4 添加服务引用 434
13.8.5 使用数据协定 436
13.8.6 定义名称空间 440
13.8.7 使用WCF数据服务 440
13.8.8 创建第一个服务 441
13.8.9 查询接口 447
13.8.10 在ASP.NET中使用
WCF数据服务 458
13.9 ASP.NET Web API 460
13.9.1 建立第一个Web API
项目 461
13.9.2 理解Web API路由 464
13.9.3 使用Web API 465
13.10 本章小结 468
第Ⅳ部分 提 供 程 序
第14章 提供程序模型概述 471
14.1 提供程序概述 472
14.2 ASP.NET 4.5中的提供
程序模型 473
14.2.1 设置提供程序以使用
SQL Server 2005、2008或
2012 474
14.2.2 成员资格提供程序 479
14.2.3 角色提供程序 483
14.2.4 个性化提供程序 486
14.2.5 站点地图提供程序 488
14.2.6 会话状态提供程序 489
14.2.7 Web事件提供程序 491
14.2.8 提供程序的配置 498
14.3 本章小结 500
第15章 扩展提供程序模型 501
15.1 提供程序是较大体系结构中
的一层 501
15.2 通过基于特性的编程修改
提供程序的行为 502
15.2.1 通过SqlMembership-
Provider建立简单的
密码结构 502
15.2.2 通过SqlMembership-
Provider建立强类型的
密码结构 505
15.3 ProviderBase类 506
15.4 建立自己的提供程序 508
15.4.1 创建CustomProviders
应用程序 508
15.4.2 构造需要的类架构 509
15.4.3 创建XML用户数据
存储 512
15.4.4 在web.config文件中
定义提供程序实例 512
15.4.5 不实现MembershipProvider
类的方法和属性 513
15.4.6 实现MembershipProvider
类的方法和属性 514
15.4.7 使用XmlMembership-
Provider进行用户登录 519
15.5 扩展预定义的提供程序 520
15.5.1 用新的LimitedSql-
RoleProvider提供程序
限制角色功能 521
15.5.2 使用新的
LimitedSqlRoleProvider
提供程序 523
15.6 本章小结 526
第Ⅴ部分 ASP.NET特性
第16章 使用母版页 529
16.1 需要母版页的原因 529
16.2 母版页的基础知识 531
16.3 编写母版页 532
16.4 编写内容页面 534
16.4.1 混合页面类型和语言 538
16.4.2 指定要使用的母版页 539
16.4.3 将母版页应用于
页面子集 540
16.4.4 使用页面标题 540
16.4.5 使用母版页中的控件和
属性 540
16.5 在母版页中指定默认内容 545
16.6 以编程方式将母版页赋予
内容页面 547
16.7 母版页的嵌套 547
16.8 浏览器特定的母版页 551
16.9 事件的触发顺序 552
16.10 高速缓存母版页 553
16.11 ASP.NET AJAX和母版页 554
16.12 本章小结 556
第17章 站点导航 557
17.1 基于XML的站点地图 557
17.2 SiteMapPath服务器控件 559
17.2.1 PathSeparator属性 561
17.2.2 PathDirection 属性 563
17.2.3 ParentLevelsDisplayed
属性 563
17.2.4 ShowToolTips属性 564
17.2.5 SiteMapPath控件的
子元素 564
17.3 TreeView服务器控件 565
17.3.1 标识TreeView控件的
内置样式 568
17.3.2 研究TreeView控件的
各个部分 569
17.3.3 将TreeView控件绑定到
XML文件 570
17.3.4 在TreeView中选择多个
选项 572
17.3.5 在TreeView控件中指定
定制的图标 575
17.3.6 指定用于连接节点的线 576
17.3.7 以编程方式使用
TreeView控件 577
17.4 Menu服务器控件 582
17.4.1 对Menu控件应用不同的
样式 583
17.4.2 Menu事件 587
17.4.3 把Menu控件绑定到
XML文件 588
17.5 SiteMap数据提供程序 589
17.5.1 ShowStartingNode属性 589
17.5.2 StartFromCurrentNode
属性 590
17.5.3 StartingNodeOffset属性 591
17.5.4 StartingNodeUrl属性 592
17.6 SiteMap API 592
17.7 URL映射 594
17.8 站点地图的本地化 595
17.8.1 为本地化构建Web.sitemap
文件 595
17.8.2 修改web.config文件 596
17.8.3 创建程序集资源(.resx)
文件 596
17.8.4 测试结果 597
17.9 安全补偿 598
17.9.1 启动管理员的角色管理
功能 598
17.9.2 建立管理员的配置部分 600
17.9.3 启用安全补偿功能 601
17.10 嵌套站点地图文件 602
17.11 本章小结 604
第18章 个性化 605
18.1 个性化模型 605
18.2 创建个性化属性 606
18.2.1 添加简单的个性化属性 607
18.2.2 使用个性化属性 607
18.2.3 添加一组个性化属性 610
18.2.4 使用分组的个性化属性 611
18.2.5 为个性化属性定义类型 611
18.2.6 使用定制的类型 612
18.2.7 提供默认值 613
18.2.8 把个性化属性指定为
只读 614
18.3 匿名个性化 614
18.3.1 支持终端用户的
匿名身份 614
18.3.2 使用匿名身份识别事件 617
18.3.3 个性化属性的匿名选项 617
18.3.4 有关匿名用户配置信息
的警告 618
18.4 编程访问个性化功能 618
18.4.1 迁移匿名用户 619
18.4.2 配置信息的个性化 619
18.4.3 确定是否继续自动保存
配置信息 620
18.4.4 在Web Application Projects
中使用配置信息 621
18.5 个性化提供程序 622
18.5.1 使用SQL Server Express
Edition 622
18.5.2 使用SQL Server 623
18.5.3 使用多个提供程序 625
18.5.4 使用通用提供程序 626
18.6 管理应用程序的配置信息 626
18.6.1 ProfileManager类的
属性 627
18.6.2 ProfileManager类的
方法 627
18.6.3 建立配置信息管理页面 628
18.6.4 研究配置信息管理页面
的代码 630
18.6.5 运行配置信息管理页面 631
18.7 本章小结 631
第19章 成员资格和角色管理 633
19.1 ASP.NET 4.5的身份验证 634
19.1.1 为成员资格建立Web
站点 634
19.1.2 添加用户 637
19.1.3 请求凭据 649
19.1.4 处理验证用户 655
19.1.5 显示在线用户数 657
19.1.6 处理密码 658
19.2 ASP.NET 4.5的授权 662
19.2.1 使用LoginView服务器
控件 662
19.2.2 为角色管理建立Web
站点 664
19.2.3 添加和检索应用程序
角色 667
19.2.4 删除角色 669
19.2.5 给角色添加用户 669
19.2.6 获取某个角色的
所有用户 670
19.2.7 获取包含某个用户的
所有角色 671
19.2.8 从角色中删除用户 672
19.2.9 检查角色中的用户 672
19.2.10 角色的高速缓存方式 673
19.3 使用SimpleMembership
API 674
19.4 使用Web Site Administration
Tool 675
19.5 Membership API的
公有方法 675
19.6 Roles API的公有方法 676
19.7 集成OAuth和OpenID
身份验证 677
19.7.1 使用OpenID 677
19.7.2 使用OAuth 681
19.8 本章小结 685
第20章 安全性 687
20.1 应用身份验证措施 688
20.1.1 <authentication>节点 688
20.1.2 基于Windows的
身份验证 689
20.1.3 基于表单的身份验证 696
20.2 验证特定的文件和文件夹 703
20.3 以编程方式授权 704
20.3.1 使用User.Identity属性 705
20.3.2 使用IsInRole方法 706
20.3.3 使用WindowsIdentity
显示更多信息 706
20.4 身份和模拟 708
20.5 通过IIS进行保护 710
20.5.1 使用文件扩展名 710
20.5.2 使用IIS 7.x/8 Manager 712
20.5.3 使用ASP.NET MMC
管理单元 713
20.6 本章小结 714
第Ⅵ部分 应用程序状态
第21章 状态管理 717
21.1 如何选择会话状态 717
21.2 理解ASP.NET中的Session
对象 719
21.2.1 会话和事件模型 720
21.2.2 配置会话状态的管理 721
21.2.3 进程中的会话状态 721
21.2.4 进程外的会话状态 727
21.2.5 SQL支持的会话状态 732
21.2.6 使用其他提供程序扩展
会话状态 734
21.2.7 无cookie的会话状态 735
21.2.8 选择维护状态的
正确方式 736
21.3 Application对象 737
21.4 查询字符串 737
21.5 cookie 738
21.6 回送和跨页面回送 738
21.7 隐藏字段、ViewState和
ControlState 740
21.8 为短时间状态存储应用
HttpContext.Current.Items 743
21.9 本章小结 744
第22章 高速缓存 745
22.1 高速缓存 745
22.1.1 输出高速缓存 746
22.1.2 部分页面(UserControl)的
高速缓存 749
22.1.3 Post-Cache Substitution 750
22.1.4 HttpCachePolicy和
客户端高速缓存 752
22.2 使用编程方式进行高速缓存 753
22.2.1 使用Cache对象高速缓存
数据 754
22.2.2 控制ASP.NET高速
缓存 754
22.2.3 高速缓存依赖性 755
22.2.4 .NET 4.x中新的对象高速
缓存选项 758
22.3 使用SQL Server高速缓存
依赖性 761
22.3.1 使数据库支持SQL Server
高速缓存禁用功能 762
22.3.2 使表支持SQL Server
高速缓存禁用功能 762
22.3.3 对SQL Server的影响 763
22.3.4 查看支持SQL Server高速
缓存禁用功能的表 764
22.3.5 使表不支持SQL Server
高速缓存禁用功能 764
22.3.6 使数据库不支持SQL Server
高速缓存禁用功能 764
22.3.7 SQL Server高速缓存禁用
功能 765
22.4 配置ASP.NET应用程序 766
22.5 测试SQL Server高速缓存
禁用功能 767
22.5.1 给页面添加多个表 769
22.5.2 给SQL Server高速缓存
依赖性和Request对象
建立关联 770
22.5.3 给SQL Server高速缓存
依赖性和Cache对象
建立关联 770
22.6 本章小结 773
第Ⅶ部分 客户端开发
第23章 ASP.NET AJAX 777
23.1 理解对AJAX的需求 777
23.1.1 AJAX出现之前的
请求/响应过程 777
23.1.2 AJAX改变了请求/
响应过程 778
23.2 ASP.NET AJAX和Visual
Studio 2012 780
23.2.1 客户端技术 781
23.2.2 服务器端技术 781
23.2.3 使用ASP.NET AJAX
进行开发 782
23.3 创建ASP.NET AJAX应用
程序 782
23.3.1 建立没有使用AJAX的
简单ASP.NET页面 784
23.3.2 建立使用AJAX的简单
ASP.NET页面 785
23.4 ASP.NET AJAX的服务器
控件 790
23.4.1 ScriptManager控件 791
23.4.2 ScriptManagerProxy
控件 793
23.4.3 Timer控件 794
23.4.4 UpdatePanel控件 795
23.4.5 UpdateProgress控件 799
23.5 使用多个UpdatePanel控件 801
23.6 使用页面历史记录 804
23.7 脚本合并 809
23.8 本章小结 813
第24章 AJAX控件工具集 815
24.1 下载和安装AJAX控件
工具集 816
24.2 ASP.NET AJAX控件 818
24.2.1 AJAX控件工具集的
扩展程序 819
24.2.2 AJAX控件工具集中的
服务器控件 863
24.3 本章小结 873
第25章 jQuery 875
25.1 jQuery简介 876
25.2 选择元素 880
25.3 修改元素 882
25.3.1 修改内容 882
25.3.2 添加和删除元素 884
25.4 事件处理 886
25.5 AJAX 888
25.6 jQuery UI 895
25.7 本章小结 898
第26章 实时通信 899
26.1 传统的实时通信选项 899
26.1.1 使用Comet 900
26.1.2 Polling 901
26.1.3 服务器发送的事件 901
26.1.4 现有方法的缺点 901
26.2 HTML5 WebSockets 902
26.2.1 WebSockets的概念 902
26.2.2 TCP/IP 903
26.2.3 TCP/HTTP 903
26.2.4 WebSockets协议简介 904
26.2.5 WebSockets数据传输 905
26.2.6 WebSockets API 906
26.2.7 ASP.NET 4.5中的
WebSockets 907
26.2.8 使用WebSockets的
优点 910
26.3 SignalR 911
26.3.1 什么是SignalR? 911
26.3.2 ASP.NET中的服务器端
SignalR 912
26.3.3 ASP.NET中的客户端
SignalR 913
26.4 本章小结 914
第27章 开发移动网站 915
27.1 移动Web设计的挑战 916
27.2 响应式设计和适应式设计 916
27.2.1 修改视口 917
27.2.2 使用CSS媒介查询 918
27.3 ASP.NET移动应用程序 920
27.3.1 检测移动浏览器和设备 921
27.3.2 处理移动母版页 921
27.3.3 创建移动Web窗体 923
27.3.4 ASP.NET Web窗体中的
FriendlyURLs 924
27.4 ASP.NET MVC 4 移动
应用程序 925
27.4.1 ASP.NET MVC 4中的
适应式显示功能 925
27.4.2 创建移动专用的视图 928
27.4.3 提供显示模式 929
27.4.4 包含jQuery Mobile和
ViewSwitcher 931
27.4.5 使用Mobile Application
项目模板 934
27.5 测试移动应用程序 934
27.6 本章小结 935
第Ⅷ部分 应用程序的配置与开发
第28章 配置 939
28.1 配置概述 939
28.1.1 服务器配置文件 940
28.1.2 应用程序配置文件 943
28.1.3 应用配置设置 943
28.1.4 检测配置文件发生的
改动 944
28.1.5 配置文件的格式 944
28.2 公共配置设置 945
28.2.1 连接字符串 945
28.2.2 配置会话状态 946
28.2.3 编译配置 950
28.2.4 定制错误 952
28.2.5 身份验证 952
28.2.6 匿名身份 955
28.2.7 授权 956
28.2.8 锁定配置设置 958
28.2.9 ASP.NET页面配置 958
28.2.10 包含文件 960
28.2.11 配置ASP.NET运行时
设置 961
28.2.12 配置ASP.NET工作者
进程 963
28.2.13 存储与应用程序相关的
设置 966
28.2.14 对配置文件编程 966
28.2.15 保护配置设置 970
28.2.16 编辑配置文件 973
28.3 创建定制部分 975
28.3.1 使用NameValueFile-
SectionHandler对象 975
28.3.2 使用Dictionary-
SectionHandler对象 976
28.3.3 使用SingleTag-
SectionHandler对象 977
28.3.4 使用定制的配置处理
程序 977
28.4 使用配置转换 979
28.4.1 添加web.config 转换 979
28.4.2 更新配置转换文件 981
28.5 打包和压缩功能 983
28.5.1 什么是打包和压缩功能 983
28.5.2 启用打包和压缩功能 984
28.6 本章小结 985
第29章 调试和错误处理技术 987
29.1 设计期间的支持 987
29.1.1 语法通知 988
29.1.2 Immediate和Command
窗口 989
29.1.3 任务列表 989
29.2 跟踪 990
29.2.1 System.Diagnostics.Trace和
ASP.NET的Page.Trace 990
29.2.2 页面级的跟踪 991
29.2.3 应用程序的跟踪 991
29.2.4 查看跟踪数据 991
29.2.5 在组件中跟踪 994
29.2.6 跟踪的传送 995
29.2.7 TraceListener 995
29.2.8 诊断选项 999
29.2.9 Web事件 1000
29.3 调试 1001
29.3.1 需要的内容 1002
29.3.2 启动调试会话 1003
29.3.3 有助于调试的工具 1004
29.3.4 使用IntelliTrace执行
历史调试 1007
29.3.5 调试多个线程 1008
29.3.6 客户端的JavaScript
调试 1008
29.3.7 SQL存储过程的调试 1009
29.4 异常和错误处理 1010
29.4.1 处理页面上的异常 1010
29.4.2 处理应用程序异常 1011
29.4.3 HTTP状态码 1011
29.5 用Page Inspector进行调试 1012
29.6 本章小结 1015
第30章 模块和处理程序 1017
30.1 处理HTTP请求 1017
30.1.1 IIS 6和ASP.NET 1017
30.1.2 IIS 7、IIS 8和
ASP.NET 1018
30.1.3 ASP.NET请求处理 1019
30.2 HttpModule 1019
30.3 HttpHandler 1024
30.3.1 一般的处理程序 1024
30.3.2 在IIS中映射文件
扩展名 1028
30.4 本章小结 1029
第31章 异步通信 1031
31.1 异步编程 1031
31.1.1 使用异步方式的原因 1031
31.1.2 编写异步代码的场合 1032
31.1.3 异步简史 1032
31.2 ASP.NET中的异步 1034
31.2.1 线程池 1035
31.2.2 编写异步代码 1036
31.2.3 并行 1039
31.2.4 服务器配置 1040
31.2.5 使用异步模式的缺点 1040
31.3 本章小结 1041
第32章 国际化应用程序的建立 1043
32.1 区域性和地区 1043
32.1.1 了解区域性类型 1044
32.1.2 ASP.NET线程 1045
32.1.3 服务器端的区域性
声明 1046
32.1.4 客户端的区域性声明 1048
32.1.5 翻译值和行为 1049
32.2 ASP.NET 4.5资源文件 1056
32.2.1 使用本地资源 1056
32.2.2 使用全局资源 1061
32.3 本章小结 1064
第33章 打包和部署ASP.NET
应用程序 1065
33.1 部署各个部分 1066
33.2 部署之前的准备步骤 1066
33.3 部署Web应用程序的方法 1067
33.3.1 使用XCopy 1067
33.3.2 使用Copy Web Site
选项 1069
33.3.3 部署预编译的Web
应用程序 1072
33.3.4 创建ASP.NET Web
Package 1073
33.3.5 发布配置文件详解 1076
33.4 部署Windows Azure Web
Sites 1082
33.5 本章小结 1084
第Ⅸ部分 其他ASP.NET技术
第34章 ASP.NET MVC 1087
34.1 MVC的定义 1087
34.2 当今Web上的MVC 1088
34.3 MVC和ASP.NET 1089
34.3.1 为方法而不是
文件服务 1089
34.3.2 ASP.NET MVC是
Web Forms 4.5? 1089
34.3.3 为什么不是Web窗体 1090
34.3.4 ASP.NET MVC是完全
不同的 1090
34.3.5 为什么“(ASP.NET>ASP.NET MVC)==True” 1090
34.3.6 约定胜于配置 1092
34.3.7 第三个请求是Charm 1095
34.4 理解路由和URL 1097
34.4.1 路由选择与URL重写
的比较 1097
34.4.2 路由的定义 1098
34.5 控制器 1103
34.5.1 控制器的定义:
IController接口 1103
34.5.2 控制器类和操作 1104
34.5.3 处理参数 1105
34.5.4 处理多个参数 1106
34.6 视图 1106
34.6.1 指定视图 1108
34.6.2 ASP.NET MVC布局 1109
34.6.3 强类型化视图 1112
34.6.4 使用HTML辅助方法 1113
34.6.5 HtmlHelper类和
扩展方法 1113
34.7 本章小结 1114
第35章 ASP.NET Web Pages和
Razor 1115
35.1 ASP.NET Web Pages概述 1116
35.2 使用Razor创建HTML
窗体 1116
35.3 显示数据 1120
35.3.1 验证 1123
35.3.2 使用布局 1125
35.4 使用辅助方法 1127
35.4.1 核心辅助方法 1127
35.4.2 使用辅助方法添加
功能 1130
35.4.3 创建定制的辅助方法 1132
35.5 本章小结 1133
第Ⅹ部分 附 录
附录A 迁移ASP.NET旧项目 1137
附录B COM集成 1145
附录C ASP.NET终极工具 1155
附录D 管理 1165
附录E 动态类型与语言 1189
附录F ASP.NET联机资源 1197
附录G 使用NuGet扩展Visual
Studio 1201