第一部分 概述 3
第1章 ASP.NET概述 3
1.1 .NET框架 3
1.1.1 公共语言运行期 3
1.1.2 .NET框架的类库 4
1.2 ASP.NET简介 5
1.3 HTTP运行期——在ASP.NET应用中的请求处理 5
1.4 ASP.NET的扩展 7
1.5 小结 8
第2章 页面编程模型 9
2.1 页面示例 9
2.2 服务器控件 10
2.2.1 ASP.NET服务器控件的层次 12
2.2.2 ASP.NET Web控件 12
2.2.3 为什么编写服务器控件 13
2.3 从文本到控件 14
2.4 代码模型 15
2.5 页面执行模型 15
2.6 可视化设计器中的ASP.NET页面 17
2.7 小结 19
第3章 组件编程概述 20
3.1 托管组件概述 20
3.2 属性 21
3.2.1 属性结构 21
3.2.2 属性的命名准则 24
3.2.3 属性的优点 24
3.3 方法 25
3.3.1 实现方法而不是属性 25
3.3.2 方法和方法参数的命名准则 25
3.4.1 委托 26
3.4 事件 26
3.4.2 事件委托 28
3.4.3 引发事件 29
3.4.4 事件示例 31
3.5 元数据attribute 35
3.6 可设计的组件 37
3.7 小结 38
第二部分 服务器控件——入门 41
第4章 用户控件:从页面到控件 41
4.1 将页面转换成用户控件 41
4.2 可复用的用户控件:SiteReader和SiteFooter示例 44
4.3 用户控件模型 47
4.4 部署用户控件 52
4.5 一个面向应用的用户控件:CruiseSelector示例 52
4.6 用户控件中的相对URL 55
4.7 通过编程方式实例化用户控件 57
4.8 缓存用户控件 58
4.8.1 VaryByControl示例 59
4.8.2 用户控件缓存如何工作 61
4.9 小结 61
第5章 开发一个简单的自定义控件 62
5.1 服务器控件概述 62
5.2 一个简单的服务器控件示例 63
5.3 编译和部署服务器控件 64
5.4 暴露属性:PrimeGenerator控件示例 66
5.4.1 从WebControl类中派生 68
5.4.2 PrimeGenerator控件的测试页面 69
5.5 为控件选择基类 70
5.6 应用设计期attribute 71
5.7.2 从工具箱中使用自定义控件 73
5.7.1 在工具箱中添加自定义控件 73
5.7 Visual Studio.NET中的自定义控件 73
5.7.3 自定义工具箱图标 74
5.8 调试服务器控件 75
5.9 小结 76
第6章 自定义控件和用户控件 77
6.1 部署 77
6.2 创建 77
6.3 内容和布局 78
6.4 设计期行为 78
6.5 性能 78
6.6 小结 79
第三部分 服务器控件——细节 83
第7章 简单属性与视图状态 83
7.1 视图状态与状态管理 83
7.1.1 使用ViewState作为属性存储——ViewStateDemoLabel示例 83
7.1.2 视图状态的更多细节 87
7.2 简单属性的声明持久性 88
7.3 从Control和WebControl类继承的属性 90
7.3.1 Control类属性 90
7.3.2 WebControl类属性 90
7.4 属性的设计期attribute 91
7.5 综合示例——PageTracker示例 93
7.6 小结 99
第8章 生成 100
8.1 基类和生成 100
8.2 Control类的rendering方法 101
8.3 重载Render方法——MetaTag控件示例 102
8.4 HtmlTextWriter和相关枚举类型 105
8.4.1 HtmlTextWriterTag枚举类型 105
8.4.2 HtmlTextWriterAttribute枚举类型 105
8.5 WebControl类的rendering方法 106
8.4.3 HtmlTextWriterStyle枚举类型 106
8.6 生成Web控件——HoverLabel示例 107
8.7 实战HtmlTextWriter——LoginUI示例 111
8.8 低版本生成 121
8.9 小结 124
第9章 控件的生命周期、事件和回传 125
9.1 控件的生命周期 125
9.2 服务器控件中的事件 132
9.3 回传架构 132
9.4 把回传事件映射到服务器端事件——IPostBackEventHandler接口 133
9.5 优化事件实现 137
9.6 生成回传的客户端脚本 139
9.7 IPostBackDataHandler和回传数据 146
9.8 综合示例——Login示例 150
9.9 暴露其他语义事件——HitTracker示例 154
9.10 小结 157
第10章 复杂属性和状态管理 158
10.1 子属性 158
10.1.1 在控件标签中持久保存的子属性 159
10.1.2 内部属性的持久性 160
10.2 属性和类型转换器 161
10.2.1 实现类型转换器 162
10.2.2 综合示例——MapDemo示例 173
10.3 状态管理、IStateManager和ViewState字典 180
10.3.1 页面如何串行化并恢复视图状态 181
10.3.2 IStateManager接口 181
10.3.3 ViewState属性和默认状态管理 182
10.4 在自定义类型中实现IStateManager 183
10.5 集合属性——LmageMap示例 189
10.6 Expando attribute——IAttributeAccessor接口 202
10.7 小结 204
第11章 控件的样式 205
11.1 样式概述 205
11.2 重载样式属性——Spreadsheet示例 208
11.3 实现自定义类型化样式——MyPanelStyle示例 210
11.4 小结 217
第12章 复合控件 218
12.1 复合控件——关键概念 218
12.2 实现复合控件——CompositeLogin示例 219
12.3 与复合控件相关的API函数 230
12.4 视图状态和子控件 230
12.5 事件上传 231
12.6 复合控件中的样式——StyledCompositeLogin示例 233
12.7 模板化控件概述 238
12.8 实现模板化控件——ContactInfo示例 239
12.9 控件解析和控件生成器 247
12.10 小结 251
第13章 客户端行为 252
13.1 浏览器能力和客户端行为 252
13.2 与客户端脚本相关的API 253
13.3 客户端脚本和DHTML的使用 254
13.4 部署客户端文件 255
13.5 综合示例——HtmlEditor示例 255
13.6 小结 266
第14章 验证器控件 267
14.1 验证架构——IValidator、BaseValidator和CustomValidator 267
14.2 验证框架 268
14.2.1 ASP.NET提供的验证器控件 268
14.2.2 在页面中使用验证 269
14.2.3 页面如何实现验证 269
14.3 文本输入的验证——StringValidator示例 270
14.2.5 ValidationSummary控件 270
14.2.4 客户端验证 270
14.4 小结 278
第15章 设计期功能 279
15.1 .NET框架的设计期架构 279
15.2 类型转换器 282
15.3 设计器 282
15.3.1 复合控件设计器——CompositeControlDesigner示例 284
15.3.2 模板化控件设计器——ContactInfoDesigner示例 285
15.3.3 读写控件设计器——ScrollablePanelDesigner示例 291
15.3.4 设计器动词 295
15.3.5 DesignerAttribute 295
15.4 UI类型编辑器 296
15.4.1 字符串编辑器示例 297
15.4.2 集合编辑器示例 300
15.4.3 EditorAttribute 301
15.5 组件编辑器 302
15.5.1 MyLabelComponentEditor示例 302
15.5.2 初始化组件编辑的设计器动词 308
15.6 调试设计期代码 309
15.7 小结 310
第16章 数据绑定控件 311
16.1 数据绑定概述 311
16.2 数据绑定控件的实现 313
16.2.1 DataSource属性及相关成员 320
16.2.2 控件层次的创建——DataBind和CreateChildControls 321
16.2.3 样式和显示 323
16.3 数据绑定控件设计器的实现 328
16.4 小结 334
第17章 本地化、许可及其他 335
17.1 本地化 335
17.1.1 控件中资源的使用 336
17.1.2 资源的嵌入与访问 339
17.1.3 元数据attribute的本地化 342
17.2 许可 344
17.2.1 ServerLicenseProvider 346
17.2.2 ExpiringLicenseProvider 352
17.2.3 EncryptedLicenseProvider 354
17.3 可配置的属性 355
17.4 部署 360
17.5 小结 361
第四部分 服务器组件 365
第18章 XML Web服务 365
18.1 XML Web服务概述 365
18.2 开发XML Web服务——StockWebService示例 365
18.2.1 实现Web服务 366
18.2.2 部署Web服务 371
18.2.3 开发Web服务客户端代理 373
18.3 基于XML Web服务的服务器控件——StockGrid示例 373
18.3.1 实现服务器控件 375
18.3.2 实现控件设计器 385
18.4 小结 388
第19章 HTTP处理程序 389
19.1 HTTP处理程序概述 389
19.1.1 IHttpHandler接口 390
19.1.2 IHttpHandlerFactory接口 391
19.2 HTTP处理程序的“Hello,World”示例 391
19.3 处理一种新的扩展名——XmlHandler示例 393
19.4 动态图像——ImageLabelHandler示例 399
19.5 HTTP处理程序和会话状态 412
19.6 小结 413
20.1 ListView控件 417
第20章 数据绑定模板化控件 417
第五部分 服务器控件案例研究 417
20.2 ListView规范 420
20.3 ListView实现 421
20.3.1 数据绑定控件 421
20.3.2 模板 428
20.3.3 样式和状态管理 431
20.3.4 生成 434
20.3.5 事件 438
20.3.6 客户端脚本功能 443
20.3.7 设计期attribute 445
20.3.8 设计器的实现 447
20.4 小结 457
第21章 基于DHTML的服务器控件 458
21.1 DatePicker控件 458
21.3 DatePicker和DatePickerDesigner的实现 461
21.2 DatePicker规范 461
21.3.1 复合控件 462
21.3.2 委托属性 463
21.3.3 样式和状态管理 465
21.3.4 客户端脚本功能 467
21.3.5 生成 471
21.3.6 事件 473
21.3.7 验证 474
21.3.8 设计期attribute 475
21.3.9 设计器的实现 477
21.4 小结 479
第六部分 附录 483
附录A 元数据attribute 483
附录B 公共类的对象模型 489
附录C Microsoft ASP.NET Web Matrix 496