注重体验与质量的电子书资源下载网站
分类于: 职场办公 其它
简介
ASP.NET 2.0服务器控件与组件开发高级编程 豆 7.7分
资源最后更新于 2020-09-05 21:58:07
作者:库斯拉维
出版社:人民邮电
出版日期:2007-01
ISBN:9787115159908
文件格式: pdf
标签: asp.net C# 服务器控件开发 .net 编程开发 控件 网页 网站
简介· · · · · ·
《ASP.NET 2.0服务器控件与组件开发高级编程》是一本专门介绍服务器控件和组件的开发与使用的图书。全书共分为33章,分别介绍了Ajax控件和组件、ASP.NET 2.0 Web部件控件、ASP.NET 2.0安全、ASP.NET 2.0表格式和分层式数据源控件、ASP.NET 2.0表格式数据绑定控件、自定义架构导入扩展和ISerializable接口、基于提供程序的服务等内容。
目录
第1章 ASP.NET 2.0框架...... 1
1.1 请求过程...... 1
1.2 为什么开发自定义组件...... 4
1.2.1 数据源控件...... 5
1.2.2 角色管理模块和主体...... 5
1.2.3 角色提供程序...... 6
1.2.4 成员资格提供程序...... 6
1.2.5 自定义XML Web服务和客户端...... 6
1.2.6 开发Ajax控件和组件...... 7
1.2.7 开发Web部件控件...... 7
1.2.8 开发自定义数据字段...... 7
1.2.9 开发自定义HTTP处理程序和模块...... 8
1.2.10 开发自定义的基于提供程序的服务...... 8
1.3 小结...... 8
第2章 开发简单的自定义控件和用户控件...... 9
2.1 隐藏信息...... 9
2.2 部署自定义控件...... 14
2.3 在Web页面中使用自定义控件...... 15
2.4 为自定义控件添加属性...... 16
2.5 为自定义控件添加设计时属性...... 19
2.5.1 属性(Property)层次属性(Attribute)...... 19
2.5.2 类层次属性(Attribute)...... 20
2.5.3 程序集层次属性(Attribute)...... 21
2.6 将自定义控件添加到Visual Studio工具箱...... 21
2.7 与HtmlTextWriter相关的枚举...... 22
2.8 状态管理...... 27
2.9 用户控件...... 30
2.9.1 使用用户控件...... 32
2.9.2 为用户控件添加属性...... 33
2.9.3 为用户控件添加方法...... 35
2.9.4 内部揭秘...... 37
2.10 小结...... 38
第3章 开发自定义控件样式...... 39
3.1 Style类...... 39
3.2 WebControl类...... 40
3.2.1 重写Render方法...... 45
3.2.2 TagKey属性...... 45
3.2.3 RenderBeginTag方法...... 45
3.2.4 AddAttributesToRender方法...... 46
3.2.5 RenderContents方法...... 50
3.2.6 RenderEndTag方法...... 50
3.3 继承WebControl类...... 51
3.4 开发自定义Style类...... 56
3.5 使用自定义Style类...... 60
3.6 小结...... 62
第4章 开发自定义控件事件...... 63
4.1 事件介绍...... 63
4.2 .NET事件设计模式...... 64
4.2.1 事件数据和事件委托类...... 64
4.2.2 引发自定义控件事件...... 66
4.3 事件优化...... 68
4.4 回传...... 70
4.4.1 C#接口实现模式...... 73
4.4.2 回传事件...... 74
4.4.3 回传数据...... 74
4.5 页面生命周期...... 84
4.6 小结...... 87
第5章 开发自定义复合控件...... 89
5.1 再次修改CreditCardForm6... 89
5.1.1 呈现HTML... 89
5.1.2 回传功能...... 94
5.2 创建复合控件...... 96
5.2.1 继承CompositeControl类...... 97
5.2.2 选定子控件...... 97
5.2.3 选定布局...... 97
5.2.4 实现自定义容器控件...... 98
5.2.5 创建容器控件...... 99
5.2.6 创建容器控件的子控件...... 100
5.2.7 为容器控件应用样式...... 103
5.2.8 将容器控件添加到复合控件...... 104
5.2.9 呈现容器控件...... 104
5.2.10 CreateChildControls方法:一站式构建子控件...... 105
5.2.11 TagKey属性...... 107
5.2.12 CreateControlStyle方法...... 107
5.2.13 公开样式属性...... 108
5.2.14 RenderContents方法...... 108
5.2.15 Label属性...... 110
5.2.16 事件冒泡...... 112
5.2.17 自定义控件从CompositeControl继承了什么...... 116
5.2.18 重写Controls集合...... 116
5.2.19 INamingContainer接口...... 117
5.3 小结...... 118
第6章 开发自定义模板控件...... 119
6.1 自定义容器控件内容...... 119
6.2 TemplatedCreditCardForm控件...... 121
6.3 在ASP.NET页面中使用模板...... 123
6.4 模板内幕...... 125
6.5 数据绑定表达式...... 128
6.6 数据绑定表达式内幕...... 133
6.7 默认模板...... 135
6.8 小结...... 144
第7章 开发包含复杂属性的自定义控件...... 145
7.1 容器控件的样式属性...... 145
7.2 自定义容器控件外观...... 146
7.3 状态管理...... 148
7.4 实现IStateManager接口的类型...... 150
7.4.1 DefaultTemplateManager类...... 151
7.4.2 TemplatedCreditCardForm3... 156
7.5 不实现IStateManager接口的类型...... 162
7.5.1 TypeConverter类...... 162
7.5.2 DefaultTemplateManager2类...... 163
7.5.3 DefaultTemplateManager2Converter类...... 164
7.5.4 使用转换器标记DefaultTemplateManager2类...... 167
7.5.5 使用不实现IStateManager接口的类...... 167
7.5.6 为什么需要使用TypeDescriptor.. 170
7.6 容器控件样式的状态管理...... 171
7.6.1 声明属性...... 171
7.6.2 TrackViewState方法...... 173
7.6.3 SaveViewState方法...... 174
7.6.4 LoadViewState方法...... 175
7.7 声明持久性...... 176
7.7.1 简单属性...... 176
7.7.2 复杂属性(连字符声明持久性)...... 177
7.7.3 复杂属性(内部属性声明持久性)...... 179
7.8 小结...... 181
第8章 ASP.NET请求处理框架...... 183
8.1 请求过程...... 183
8.2 HTTP模块...... 186
8.3 HTTP处理程序...... 187
8.4 HTTP处理程序工厂...... 188
8.5 控件生成器...... 188
8.6 开发自定义HTTP模块...... 195
8.7 注册自定义HTTP模块...... 198
8.8 开发自定义HTTP处理程序工厂...... 198
8.9 开发自定义HTTP处理程序...... 200
8.9.1 RSS... 200
8.9.2 RssHandler.. 201
8.9.3 注册自定义HTTP处理程序...... 204
8.10 开发自定义控件生成器...... 206
8.10.1 开发自定义控件生成器CompositeCreditCardForm2Builder.. 209
8.10.2 开发自定义控件CompositeCreditCardForm2... 210
8.11 小结...... 215
第9章 数据绑定...... 217
9.1 CustomTable控件...... 217
9.2 设置数据源...... 218
9.3 重写CreateChildControls方法...... 219
9.4 重写DataBind方法...... 221
9.5 创建控件层次...... 222
9.5.1 DataControlField类...... 224
9.5.2 CreateFields方法...... 225
9.5.3 CreateHeaderRow方法...... 227
9.5.4 CreateBodyRow方法...... 228
9.5.5 CachePrimaryKey方法...... 233
9.5.6 CreatePagerRow方法...... 234
9.6 重写CreateControlStyle属方法...... 235
9.7 实现CustomTable事件...... 236
9.8 重写OnBubbleEvent. 237
9.9 CustomTableRow类...... 238
9.10 CustomTableRowCollection类...... 240
9.11 子控件样式...... 241
9.12 重写Render方法...... 242
9.13 状态管理...... 244
9.13.1 TrackViewState方法...... 244
9.13.2 SaveViewState方法...... 245
9.13.3 LoadViewState方法...... 246
9.14 在页面中使用CustomTable控件...... 248
9.15 CustomTable控件的缺点...... 249
9.16 小结...... 249
第10章 XML Web服务...... 251
10.1 开发和使用XML Web服务...... 251
10.2 添加引用按钮背后的秘密...... 254
10.3 WSDL文档...... 257
10.3.1 参数的名称、类型和顺序...... 259
10.3.2 返回值的类型和顺序...... 259
10.3.3 描述方法...... 260
10.3.4 描述访问XML Web服务方法的通信协议...... 261
10.3.5 为方法访问设置站点...... 262
10.3.6 设置方法的类...... 262
10.4 XmlWebServiceMethodInvoker类...... 262
10.4.1 以编程方式下载WSDL文档...... 263
10.4.2 根据WSDL文档反序列化一个.NET对象...... 264
10.4.3 为代理类生成代码...... 265
10.4.4 Import方法背后的秘密...... 266
10.4.5 编译代理类代码...... 269
10.4.6 创建代理类实例...... 270
10.4.7 调用代理类实例中的特定方法...... 270
10.4.8 总结:The InvokeXmlWebServiceMethod方法...... 274
10.5 如何使用XmlWebServiceMethodInvoker.. 275
10.6 缓存编译后的代理类...... 277
10.6.1 缓存相关属性...... 278
10.6.2 CompileCodeForProxyClass方法...... 278
10.6.3 InvokeXmlWebServiceMethod方法...... 280
10.6.4 使用缓存功能...... 281
10.7 开发XML Web服务自定义控件...... 284
10.8 XmlWebServiceResolver组件...... 286
10.8.1 XMLResolver类...... 286
10.8.2 GetEntity方法...... 290
10.9 小结...... 294
第11章 实现架构导入扩展和ISerializable接口...... 295
11.1 实现IXmlSerializable接口...... 295
11.1.1 实现服务器端组件...... 296
11.1.2 开发客户端组件...... 301
11.2 开发自定义架构导入扩展...... 303
11.2.1 使用喜欢的语言编写代码...... 305
11.2.2 CodeDom方法...... 305
11.3 注册自定义架构导入扩展...... 319
11.4 以块化方式发送和接收数据...... 321
11.4.1 BookContent类...... 321
11.4.2 ForumBook类...... 324
11.4.3 自定义架构导入扩展...... 325
11.5 XmlWebServiceMethodInvoker的可扩展能力...... 326
11.6 小结...... 326
第12章 理解ASP.NET 2.0表格式数据源控件模型...... 327
12.1 为什么需要ASP.NET 2.0数据源控件模型...... 327
12.1.1 获取数据...... 329
12.1.2 Update事件...... 330
12.2 ASP.NET 2.0数据源控件模型...... 332
12.3 AS P.NET 2.0表格式数据源控件模型...... 333
12.3.1 IDataSource接口...... 333
12.3.2 DataSourceControl类背后的秘密...... 335
12.3.3 继承DataSourceControl基类...... 336
12.3.4 DataSourceView类...... 338
12.3.5 Delete方法...... 349
12.3.6 Update方法...... 353
12.3.7 Insert方法...... 357
12.3.8 状态管理...... 361
12.4 小结...... 362
第13章 ASP.NET 2.0数据源控件参数模型...... 363
13.1 Parameters类...... 363
13.2 Parameter类...... 366
13.2.1 OnParameterChanged方法...... 366
13.2.2 SaveCurrentValue方法...... 367
13.2.3 Evaluate方法...... 368
13.2.4 CookieParameter组件...... 368
13.2.5 ControlParameter组件...... 369
13.3 ParameterCollection类...... 371
13.3.1 ParametersChanged事件...... 371
13.3.2 OnInsert方法...... 372
13.3.3 GetValues方法...... 372
13.3.4 UpdateValues方法...... 374
13.4 自动调用GetValues和UpdateValues方法...... 374
13.4.1 ParameterCollection类型属性...... 374
13.4.2 OnInit和Page_LoadComplete方法...... 376
13.4.3 ExecuteSelect方法...... 377
13.4.4 ExecuteDelete方法...... 377
13.4.5 ExecuteUpdate方法...... 379
13.4.6 ExecuteInsert方法...... 381
13.5 综合应用...... 383
13.6 开发自定义参数...... 385
13.6.1 XmlWebServiceParameter组件...... 385
13.6.2 ObjectParameter组件...... 389
13.6.3 ClientParameter组件...... 392
13.7 小结...... 397
第14章 开发ASP.NET 2.0自定义表格式数据源控件...... 399
14.1 XmlWebServiceMethodInvoker组件...... 399
14.2 DataSourceControl类...... 401
14.3 DataSourceView类...... 402
14.3.1 ExecuteSelect方法...... 403
14.3.2 ExecuteUpdate方法...... 415
14.3.3 ExecuteInsert方法...... 421
14.3.4 ExecuteDelete方法...... 425
14.4 RetrieveMethodArgumentNamesAndValues方法...... 428
14.5 状态管理...... 430
14.6 小结...... 432
第15章 理解ASP.NET 2.0分层式数据源控件模型...... 433
15.1 IHierarchicalDataSource接口...... 434
15.2 HierarchicalDataSourceControl类...... 435
15.3 HierarchicalDataSourceView类...... 437
15.4 IHierarchyData接口...... 440
15.5 IHierarchicalEnumerable接口...... 441
15.5.1 XmlHierarchyData类...... 444
15.5.2 XmlHierarchicalEnumerable类...... 450
15.5.3 XmlHierarchyDataPropertyDescriptor类...... 451
15.5.4 ICustomTypeDescriptor接口...... 453
15.5.5 XmlHierarchicalDataSourceView.... 455
15.6 小结...... 456
第16章 开发ASP.NET 2.0自定义分层式数据源控件...... 457
16.1 CustomSqlDataSource控件...... 457
16.2 SqlHierarchyDataPropertyDescriptor类...... 463
16.3 SqlHierarchyData类...... 466
16.3.1 构造函数...... 466
16.3.2 实现HasChildren属性...... 467
16.3.3 实现Type属性...... 467
16.4 SqlHierarchicalEnumerable类...... 469
16.5 SqlHierarchicalDataSourceView类...... 471
16.6 小结...... 472
第17章 理解ASP.NET 2.0表格式数据绑定控件模型...... 473
17.1 本章概述...... 473
17.2 ASP.NET 1.x数据绑定控件模型...... 475
17.2.1 RetrieveData方法...... 475
17.2.2 重写DataBind方法...... 476
17.2.3 处理第3个数据绑定任务...... 476
17.3 BaseDataBoundControl类...... 477
17.3.1 自动调用DataBind方法...... 477
17.3.2 第一个和第二个数据绑定任务...... 478
17.3.3 第3个数据绑定任务...... 478
17.4 开发继承自BaseDataBoundControl的自定义数据绑定控件...... 480
17.4.1 处理Load事件...... 481
17.4.2 重写PerformSelect方法...... 481
17.4.3 以声明方式编程而不编写代码...... 483
17.4.4 CustomTable2控件的不足...... 484
17.5 DataBoundControl类...... 484
17.5.1 GetDataSource方法...... 485
17.5.2 GetData方法...... 486
17.5.3 重写BaseDataBoundControl的抽象方法...... 486
17.6 开发继承自DataBoundControl的自定义数据绑定控件...... 490
17.6.1 重写CreateDataSourceSelectArguments方法...... 490
17.6.2 重写PerformDataBinding方法...... 492
17.6.3 UpdateCallback方法...... 492
17.6.4 DeleteCallback方法...... 494
17.6.5 以声明方式实现针对未知数据的无代码编程...... 495
17.7 CompositeDataBoundControl类...... 496
17.7.1 重写PerformDataBinding方法...... 497
17.7.2 重写DataBind方法...... 498
17.7.3 重写CreateChildControls方法...... 498
17.7.4 重写Controls集合...... 499
17.8 开发继承自CompositeDataBoundControl的控件...... 499
17.8.1 MasterDetailForm控件...... 500
17.8.2 AddDetailRow方法...... 505
17.8.3 AddMasterCell方法...... 507
17.8.4 AddMasterHeaderCell方法...... 508
17.8.5 AddMasterSelectButton方法...... 508
17.8.6 AddDetailCommandBar方法...... 509
17.8.7 Delete数据操作...... 511
17.8.8 Update数据操作...... 512
17.8.9 Sort操作...... 513
17.8.10 控件状态...... 514
17.8.11 外观属性...... 516
17.8.12 无需编程实现主/从表...... 516
17.9 小结...... 518
第18章 ASP.NET 2.0数据控件字段模型...... 519
18.1 为什么需要ASP.NET 2.0数据控件字段模型...... 519
18.2 DataControlField组件...... 521
18.2.1 OnFieldChanged方法...... 523
18.2.2 Initialize方法...... 524
18.2.3 InitializeCell方法...... 524
18.2.4 ExtractValuesFromCell方法...... 525
18.3 BoundField... 526
18.3.1 InitializeCell方法...... 526
18.3.2 InitializeDataCell方法...... 527
18.3.3 OnDataBindField方法...... 527
18.3.4 GetValue方法...... 528
18.3.5 ExtractValuesFromCell方法...... 530
18.4 DataControlFieldCollection组件...... 531
18.4.1 FieldsChanged事件...... 531
18.4.2 OnInsert方法...... 532
18.5 开发自定义数据控件字段...... 532
18.5.1 DropDownListField... 533
18.5.2 CalendarField... 541
18.6 小结...... 546
第19章 开发ASP.NET 2.0自定义表格式数据绑定控件...... 547
19.1 继承自CompositeDataBoundControl. 548
19.2 重写CreateChildControls方法...... 548
19.2.1 初始化参数...... 550
19.2.2 描述主键字段...... 551
19.2.3 创建Table子控件...... 552
19.2.4 创建PagedDataSource对象...... 553
19.2.5 创建数据控件字段...... 554
19.2.6 创建顶部分页行...... 559
19.2.7 创建标题行...... 562
19.2.8 枚举数据记录...... 563
19.2.9 创建空数据行...... 565
19.2.10 创建和填充GridViewRowCollection... 566
19.2.11 CreateRow方法...... 567
19.2.12 InitializeRow方法...... 567
19.3 重写CreateDataSourceSelectArguments方法...... 568
19.4 重写CreateControlStyle方法...... 570
19.5 重写OnBubbleEvent方法...... 570
19.6 重写Render方法...... 578
19.7 状态管理...... 582
19.8 重写OnInit方法...... 584
19.9 事件...... 584
19.10 GridViewRow类...... 587
19.11 GridViewRowCollection类...... 591
19.12 小结...... 591
第20章 为什么需要ASP.NET 2.0成员资格/角色模型...... 593
20.1 ASP.NET 1.x安全模型...... 593
20.2 授权机制...... 599
20.3 ASP.NET 1.x安全模型的缺点...... 600
20.4 .NET 2.0提供程序模式...... 601
20.5 小结...... 602
第21章 理解ASP.NET 2.0成员资格模型...... 603
21.1 Membership类...... 603
21.1.1 成员资格提供程序的初始化和实例化...... 603
21.1.2 <membership>节...... 604
21.1.3 Provider和Providers属性...... 605
21.2 成员资格API.. 609
21.2.1 将新用户添加到数据存储中...... 609
21.2.2 从数据存储中删除用户...... 610
21.2.3 在数据存储中更新指定用户成员资格信息...... 611
21.2.4 根据数据存储验证用户凭证...... 611
21.2.5 在数据存储中查找用户...... 611
21.2.6 从数据存储中获取用户成员资格信息...... 613
21.2.7 强制设置应用程序特定的密码验证规则...... 614
21.2.8 访问用户在线时间窗口...... 616
21.3 开发自定义安全控件...... 617
21.3.1 Login控件...... 617
21.3.2 Register控件...... 622
21.3.3 使用Login和Register控件...... 624
21.3.4 注册SqlMembershipProvider.. 626
21.4 MembershipUser类...... 627
21.4.1 访问成员资格提供程序...... 629
21.4.2 重置并获取密码...... 629
21.4.3 修改密码...... 630
21.4.4 修改密码问题和答案...... 631
21.4.5 用户解锁...... 631
21.5 小结...... 632
第22章 开发自定义MembershipProvider和MembershipUser组件...... 633
22.1 MembershipProvider类...... 633
22.2 SqlMembershipProvider类...... 635
22.3 ProviderBase基类...... 635
22.4 MembershipProvider类...... 641
22.4.1 ChangePassword方法...... 642
22.4.2 ValidateUserInfo方法...... 644
22.4.3 UpdateUserInfo方法...... 648
22.4.4 Update方法...... 649
22.4.5 ChangePasswordQuestionAndAnswer方法...... 650
22.4.6 CreateUser方法...... 651
22.4.7 DeleteUser方法...... 656
22.4.8 FindUsersByEmail方法...... 657
22.4.9 FindUsersByName方法...... 658
22.4.10 GetAllUsers方法...... 660
22.4.11 Select方法...... 661
22.4.12 GetNumberOfUsersOnline方法...... 662
22.4.13 GetPassword方法...... 662
22.4.14 GetUser方法...... 665
22.4.15 GetUserNameByEmail方法...... 668
22.4.16 ResetPassword方法...... 668
22.4.17 UnlockUser方法...... 671
22.4.18 UpdateUser方法...... 672
22.4.19 ValidateUser方法...... 672
22.5 注册SqlMembershipProvider.. 673
22.6 使用自定义成员资格提供程序...... 674
22.7 扩展ASP.NET 2.0成员资格API.. 675
22.7.1 CustomMembershipUser类...... 676
22.7.2 CustomMembershipProvider类...... 677
22.7.3 CustomSqlMembershipProvider类...... 678
22.7.4 使用CustomMembershipUser、CustomMembershipProvider和 CustomSqlMembershipProvider.. 684
22.8 小结...... 686
第23章 理解ASP.NET角色管理模型...... 687
23.1 角色管理API.. 687
23.1.1 管理角色...... 688
23.1.2 管理用户...... 689
23.2 RolePrincipal类...... 691
23.2.1 身份...... 691
23.2.2 角色成员...... 692
23.2.3 IPrincipal接口...... 692
23.3 RoleManagerModule类...... 697
23.3.1 PostAuthenticateRequestCallback方法...... 698
23.3.2 GetRoles事件...... 699
23.3.3 EndRequestCallback方法...... 701
23.4 小结...... 702
第24章 开发自定义角色提供程序、模块和主体...... 703
24.1 RoleProvider基类...... 703
24.2 XmlRoleProvider.. 704
24.3 ProviderBase类...... 705
24.4 XML API.. 706
24.4.1 流XML API.. 707
24.4.2 随机访问XML API.. 711
24.5 实现RoleProvider类的方法...... 713
24.5.1 LoadData方法...... 714
24.5.2 SaveData方法...... 714
24.5.3 角色管理...... 715
24.5.4 用户管理...... 727
24.6 开发自定义角色主体...... 739
24.6.1 构造函数...... 740
24.6.2 GetRoles方法...... 742
24.6.3 实现IPrincipal接口...... 743
24.7 开发自定义角色管理模块...... 744
24.7.1 PostAuthenticateRequestCallback方法...... 745
24.7.2 GetRoles事件...... 747
24.7.3 EndRequestCallback方法...... 748
24.7.4 XmlRoleProvider和CacheDependency... 750
24.8 使用XmlRoleProvider.. 751
24.9 小结...... 756
第25章 开发基于提供程序的自定义服务...... 757
25.1 开发基于提供程序的自定义服务的方法...... 757
25.2 基于提供程序的RSS服务...... 758
25.3 自定义提供程序基类...... 759
25.4 自定义提供程序集合...... 760
25.5 配置Web.config和Machine.config文件...... 760
25.5.1 自定义配置节...... 761
25.5.2 注册<rssService>节...... 762
25.6 实现Service类...... 763
25.7 使用RSS服务...... 765
25.8 SqlRssProvider类...... 766
25.8.1 Initialize方法...... 766
25.8.2 LoadRss方法...... 772
25.8.3 GetDataReader方法...... 774
25.8.4 注册SqlRssProvider.. 774
25.9 RssHelper类...... 775
25.10 XmlRssProvider类...... 777
25.10.1 Initialize方法...... 778
25.10.2 LoadRss方法...... 781
25.10.3 RetrieveData方法...... 783
25.10.4 注册XmlRssProvider.. 784
25.11 小结...... 785
第26章 开发Ajax控件和组件:客户端功能...... 787
26.1 Ajax组件和控件...... 787
26.2 Ajax控件客户端功能的实现方法...... 789
26.3 呈现方式...... 790
26.3.1 将脚本呈现为HTML属性值...... 790
26.3.2 将客户端脚本呈现为脚本块...... 792
26.3.3 客户端脚本库...... 799
26.4 部署...... 802
26.4.1 将源文件部署到一个共享位置...... 803
26.4.2 将源文件嵌入程序集...... 803
26.5 呈现控件的客户端脚本的时机...... 811
26.5.1 禁用控件的客户端功能...... 811
26.5.2 检查请求浏览器的Ajax功能...... 812
26.6 呈现控件的客户端脚本的位置...... 813
26.6.1 重写OnPreRender方法...... 814
26.6.2 重写AddAttributesToRender方法...... 814
26.6.3 重写RenderContents方法...... 814
26.6.4 重写Render方法...... 815
26.7 退回到服务器端代码...... 815
26.8 开发Ajax控件...... 816
26.8.1 Ajax控件CustomImage.. 817
26.8.2 Ajax复合控件ImageDialog... 825
26.9 小结...... 840
第27章 开发Ajax控件和组件:异步客户端回调...... 841
27.1 为什么使用AjaxDropDownList控件...... 842
27.2 客户端回调机制...... 843
27.3 实现ASP.NET 2.0客户端回调机制...... 843
27.3.1 重写OnPreRender方法...... 844
27.3.2 重写Render方法...... 851
27.3.3 服务器端...... 852
27.4 ASP.NET 2.0客户端回调机制...... 853
27.4.1 重写OnPreRender方法...... 854
27.4.2 重写Render方法...... 856
27.4.3 服务器端...... 857
27.5 未知类型数据存储Ajax控件...... 858
27.6 主/次窗体...... 862
27.7 开发Ajax数据控件字段...... 863
27.8 AjaxDetailsDialog控件...... 866
27.8.1 将AjaxDetailsDialog实现为复合控件...... 869
27.8.2 将AjaxDetailsDialog实现为Ajax控件...... 872
27.9 AjaxField数据控件字段...... 879
27.9.1 重写InitializeCell方法...... 879
27.9.2 重写OnDataBindField方法...... 882
27.9.3 实现CreateField方法...... 884
27.9.4 重写ExtractValuesFromCell方法...... 884
27.10 DropDownListField2控件...... 885
27.10.1 重写InitializeCell方法...... 885
27.10.2 重写CreateField方法...... 888
27.10.3 重写ExtractValuesFromCell方法...... 888
27.11 Ajax控件CustomGridView.... 888
27.11.1 重写CreateChildTable方法...... 888
27.11.2 重写PrepareControlHierarchy方法...... 891
27.12 小结...... 897
第28章 开发Ajax控件和组件:Ajax模式...... 899
28.1 模式...... 899
28.2 Google的XML Web服务API.. 900
28.3 预测式获取(Predictive Fetch)模式...... 908
28.3.1 继承自WebControl基类...... 910
28.3.2 实现ICallbackEventHandler接口...... 927
28.4 小结...... 930
第29章 开发Ajax控件和组件:更多的Ajax模式...... 931
29.1 周期式刷新(Periodic Refresh)模式...... 931
29.1.1 继承自WebControl基类...... 932
29.1.2 实现ICallbackEventHandler接口...... 934
29.2 提交节流(Submission Throttling)模式...... 941
29.2.1 重写OnPreRender方法...... 942
29.2.2 重写Render方法...... 944
29.2.3 JavaScript函数...... 954
29.3 显式提交(Explicit Submission)模式...... 961
29.3.1 重写OnPreRender方法...... 961
29.3.2 重写Render方法...... 963
29.3.3 实现ICallbackEventHandler接口...... 965
29.3.4 JavaScript函数...... 966
29.4 小结...... 967
第30章 理解ASP.NET 2.0 Web部件框架...... 969
30.1 什么是ASP.NET Web部件框架...... 969
30.2 以声明方式开发WebPart控件...... 971
30.3 移动WebPart控件...... 975
30.4 个性化WebPart控件的属性...... 979
30.5 个性化WebPart控件的自定义属性...... 982
30.6 添加已声明的WebPart控件...... 984
30.7 添加已关闭的WebPart控件...... 986
30.8 导出WebPart控件...... 988
30.9 添加导入的WebPart控件...... 991
30.10 Web部件框架的主要组件...... 993
30.11 Part基类...... 994
30.12 小结...... 996
第31章 开发自定义WebPart、EditorPart和CatalogPart控件...... 997
31.1 WebPart基类...... 997
31.2 开发自定义WebPart控件...... 1001
31.2.1 CreateChildControls方法...... 1002
31.2.2 AddContainer方法...... 1004
31.2.3 AddItemToContainer方法...... 1004
31.2.4 使用RssReaderWebPart控件...... 1005
31.3 实现IWebPart接口...... 1006
31.4 IWebActionable接口...... 1006
31.4.1 开发自定义Web部件谓词...... 1008
31.4.2 开发支持自定义Web部件谓词的WebPart控件...... 1009
31.5 EditorPart基类...... 1014
31.6 开发自定义EditorPart控件...... 1015
31.6.1 将RssReaderEditorPart作为复合控件...... 1016
31.6.2 SyncChanges方法...... 1021
31.6.3 ApplyChanges方法...... 1022
31.6.4 OnLoad方法...... 1024
31.6.5 RssReaderWebPart4控件...... 1024
31.7 CatalogPart基类...... 1034
31.8 开发自定义CatalogPart控件...... 1038
31.8.1 GetAvailableWebPartDescriptions方法...... 1040
31.8.2 LoadWebPartInfoSet方法...... 1044
31.8.3 GetWebPart方法...... 1045
31.8.4 LoadWebPartDescriptionFile方法...... 1046
31.8.5 使用XmlWebServiceCatalogPart控件...... 1046
31.9 小结...... 1052
第32章 开发自定义WebPartZoneBase控件...... 1053
32.1 WebZone基类...... 1053
32.2 WebPartZoneBase基类...... 1056
32.2.1 继承自WebZone基类...... 1057
32.2.2 CreateWebPartChrome方法...... 1059
32.2.3 CreateInitialWebParts方法...... 1059
32.2.4 CreateVerbs事件...... 1059
32.2.5 实现IPostBackEventHandler接口...... 1060
32.3 WebPartZone类...... 1063
32.4 开发自定义WebPartZone控件...... 1065
32.4.1 XmlWebServiceWebPartZone类...... 1065
32.4.2 ProviderBasedWebPartZone类...... 1071
32.4.3 SqlDescriptionDocumentProvider类...... 1085
32.5 WebPartChrome类...... 1088
32.5.1 RenderWebPart方法...... 1089
32.5.2 PerformPreRender方法...... 1093
32.6 开发自定义WebPartChrome.. 1094
32.6.1 CustomWebPartZone类...... 1097
32.6.2 使用CustomWebPartChrome控件...... 1097
32.7 小结...... 1098
第33章 WebPartManager、Web部件连接和数据绑定WebPart控件...... 1099
33.1 开发自定义WebPartManager控件...... 1099
33.2 连接WebPart控件...... 1103
33.2.1 实现提供者和订阅者WebPart控件...... 1112
33.2.2 动态连接...... 1118
33.2.3 以编程方式实现连接...... 1123
33.3 开发数据绑定WebPart控件...... 1132
33.3.1 BaseDataBoundWebPart基类...... 1133
33.3.2 DataBoundWebPart基类...... 1135
33.3.3 CompositeDataBoundWebPart基类...... 1137
33.3.4 GridViewWebPart控件...... 1138
33.3.5 MasterDetailGridViewWebPart控件...... 1140
33.4 小结...... 1145
第1章 ASP.NET 2.0框架...... 1
1.1 请求过程...... 1
1.2 为什么开发自定义组件...... 4
1.2.1 数据源控件...... 5
1.2.2 角色管理模块和主体...... 5
1.2.3 角色提供程序...... 6
1.2.4 成员资格提供程序...... 6
1.2.5 自定义XML Web服务和客户端...... 6
1.2.6 开发Ajax控件和组件...... 7
1.2.7 开发Web部件控件...... 7
1.2.8 开发自定义数据字段...... 7
1.2.9 开发自定义HTTP处理程序和模块...... 8
1.2.10 开发自定义的基于提供程序的服务...... 8
1.3 小结...... 8
第2章 开发简单的自定义控件和用户控件...... 9
2.1 隐藏信息...... 9
2.2 部署自定义控件...... 14
2.3 在Web页面中使用自定义控件...... 15
2.4 为自定义控件添加属性...... 16
2.5 为自定义控件添加设计时属性...... 19
2.5.1 属性(Property)层次属性(Attribute)...... 19
2.5.2 类层次属性(Attribute)...... 20
2.5.3 程序集层次属性(Attribute)...... 21
2.6 将自定义控件添加到Visual Studio工具箱...... 21
2.7 与HtmlTextWriter相关的枚举...... 22
2.8 状态管理...... 27
2.9 用户控件...... 30
2.9.1 使用用户控件...... 32
2.9.2 为用户控件添加属性...... 33
2.9.3 为用户控件添加方法...... 35
2.9.4 内部揭秘...... 37
2.10 小结...... 38
第3章 开发自定义控件样式...... 39
3.1 Style类...... 39
3.2 WebControl类...... 40
3.2.1 重写Render方法...... 45
3.2.2 TagKey属性...... 45
3.2.3 RenderBeginTag方法...... 45
3.2.4 AddAttributesToRender方法...... 46
3.2.5 RenderContents方法...... 50
3.2.6 RenderEndTag方法...... 50
3.3 继承WebControl类...... 51
3.4 开发自定义Style类...... 56
3.5 使用自定义Style类...... 60
3.6 小结...... 62
第4章 开发自定义控件事件...... 63
4.1 事件介绍...... 63
4.2 .NET事件设计模式...... 64
4.2.1 事件数据和事件委托类...... 64
4.2.2 引发自定义控件事件...... 66
4.3 事件优化...... 68
4.4 回传...... 70
4.4.1 C#接口实现模式...... 73
4.4.2 回传事件...... 74
4.4.3 回传数据...... 74
4.5 页面生命周期...... 84
4.6 小结...... 87
第5章 开发自定义复合控件...... 89
5.1 再次修改CreditCardForm6... 89
5.1.1 呈现HTML... 89
5.1.2 回传功能...... 94
5.2 创建复合控件...... 96
5.2.1 继承CompositeControl类...... 97
5.2.2 选定子控件...... 97
5.2.3 选定布局...... 97
5.2.4 实现自定义容器控件...... 98
5.2.5 创建容器控件...... 99
5.2.6 创建容器控件的子控件...... 100
5.2.7 为容器控件应用样式...... 103
5.2.8 将容器控件添加到复合控件...... 104
5.2.9 呈现容器控件...... 104
5.2.10 CreateChildControls方法:一站式构建子控件...... 105
5.2.11 TagKey属性...... 107
5.2.12 CreateControlStyle方法...... 107
5.2.13 公开样式属性...... 108
5.2.14 RenderContents方法...... 108
5.2.15 Label属性...... 110
5.2.16 事件冒泡...... 112
5.2.17 自定义控件从CompositeControl继承了什么...... 116
5.2.18 重写Controls集合...... 116
5.2.19 INamingContainer接口...... 117
5.3 小结...... 118
第6章 开发自定义模板控件...... 119
6.1 自定义容器控件内容...... 119
6.2 TemplatedCreditCardForm控件...... 121
6.3 在ASP.NET页面中使用模板...... 123
6.4 模板内幕...... 125
6.5 数据绑定表达式...... 128
6.6 数据绑定表达式内幕...... 133
6.7 默认模板...... 135
6.8 小结...... 144
第7章 开发包含复杂属性的自定义控件...... 145
7.1 容器控件的样式属性...... 145
7.2 自定义容器控件外观...... 146
7.3 状态管理...... 148
7.4 实现IStateManager接口的类型...... 150
7.4.1 DefaultTemplateManager类...... 151
7.4.2 TemplatedCreditCardForm3... 156
7.5 不实现IStateManager接口的类型...... 162
7.5.1 TypeConverter类...... 162
7.5.2 DefaultTemplateManager2类...... 163
7.5.3 DefaultTemplateManager2Converter类...... 164
7.5.4 使用转换器标记DefaultTemplateManager2类...... 167
7.5.5 使用不实现IStateManager接口的类...... 167
7.5.6 为什么需要使用TypeDescriptor.. 170
7.6 容器控件样式的状态管理...... 171
7.6.1 声明属性...... 171
7.6.2 TrackViewState方法...... 173
7.6.3 SaveViewState方法...... 174
7.6.4 LoadViewState方法...... 175
7.7 声明持久性...... 176
7.7.1 简单属性...... 176
7.7.2 复杂属性(连字符声明持久性)...... 177
7.7.3 复杂属性(内部属性声明持久性)...... 179
7.8 小结...... 181
第8章 ASP.NET请求处理框架...... 183
8.1 请求过程...... 183
8.2 HTTP模块...... 186
8.3 HTTP处理程序...... 187
8.4 HTTP处理程序工厂...... 188
8.5 控件生成器...... 188
8.6 开发自定义HTTP模块...... 195
8.7 注册自定义HTTP模块...... 198
8.8 开发自定义HTTP处理程序工厂...... 198
8.9 开发自定义HTTP处理程序...... 200
8.9.1 RSS... 200
8.9.2 RssHandler.. 201
8.9.3 注册自定义HTTP处理程序...... 204
8.10 开发自定义控件生成器...... 206
8.10.1 开发自定义控件生成器CompositeCreditCardForm2Builder.. 209
8.10.2 开发自定义控件CompositeCreditCardForm2... 210
8.11 小结...... 215
第9章 数据绑定...... 217
9.1 CustomTable控件...... 217
9.2 设置数据源...... 218
9.3 重写CreateChildControls方法...... 219
9.4 重写DataBind方法...... 221
9.5 创建控件层次...... 222
9.5.1 DataControlField类...... 224
9.5.2 CreateFields方法...... 225
9.5.3 CreateHeaderRow方法...... 227
9.5.4 CreateBodyRow方法...... 228
9.5.5 CachePrimaryKey方法...... 233
9.5.6 CreatePagerRow方法...... 234
9.6 重写CreateControlStyle属方法...... 235
9.7 实现CustomTable事件...... 236
9.8 重写OnBubbleEvent. 237
9.9 CustomTableRow类...... 238
9.10 CustomTableRowCollection类...... 240
9.11 子控件样式...... 241
9.12 重写Render方法...... 242
9.13 状态管理...... 244
9.13.1 TrackViewState方法...... 244
9.13.2 SaveViewState方法...... 245
9.13.3 LoadViewState方法...... 246
9.14 在页面中使用CustomTable控件...... 248
9.15 CustomTable控件的缺点...... 249
9.16 小结...... 249
第10章 XML Web服务...... 251
10.1 开发和使用XML Web服务...... 251
10.2 添加引用按钮背后的秘密...... 254
10.3 WSDL文档...... 257
10.3.1 参数的名称、类型和顺序...... 259
10.3.2 返回值的类型和顺序...... 259
10.3.3 描述方法...... 260
10.3.4 描述访问XML Web服务方法的通信协议...... 261
10.3.5 为方法访问设置站点...... 262
10.3.6 设置方法的类...... 262
10.4 XmlWebServiceMethodInvoker类...... 262
10.4.1 以编程方式下载WSDL文档...... 263
10.4.2 根据WSDL文档反序列化一个.NET对象...... 264
10.4.3 为代理类生成代码...... 265
10.4.4 Import方法背后的秘密...... 266
10.4.5 编译代理类代码...... 269
10.4.6 创建代理类实例...... 270
10.4.7 调用代理类实例中的特定方法...... 270
10.4.8 总结:The InvokeXmlWebServiceMethod方法...... 274
10.5 如何使用XmlWebServiceMethodInvoker.. 275
10.6 缓存编译后的代理类...... 277
10.6.1 缓存相关属性...... 278
10.6.2 CompileCodeForProxyClass方法...... 278
10.6.3 InvokeXmlWebServiceMethod方法...... 280
10.6.4 使用缓存功能...... 281
10.7 开发XML Web服务自定义控件...... 284
10.8 XmlWebServiceResolver组件...... 286
10.8.1 XMLResolver类...... 286
10.8.2 GetEntity方法...... 290
10.9 小结...... 294
第11章 实现架构导入扩展和ISerializable接口...... 295
11.1 实现IXmlSerializable接口...... 295
11.1.1 实现服务器端组件...... 296
11.1.2 开发客户端组件...... 301
11.2 开发自定义架构导入扩展...... 303
11.2.1 使用喜欢的语言编写代码...... 305
11.2.2 CodeDom方法...... 305
11.3 注册自定义架构导入扩展...... 319
11.4 以块化方式发送和接收数据...... 321
11.4.1 BookContent类...... 321
11.4.2 ForumBook类...... 324
11.4.3 自定义架构导入扩展...... 325
11.5 XmlWebServiceMethodInvoker的可扩展能力...... 326
11.6 小结...... 326
第12章 理解ASP.NET 2.0表格式数据源控件模型...... 327
12.1 为什么需要ASP.NET 2.0数据源控件模型...... 327
12.1.1 获取数据...... 329
12.1.2 Update事件...... 330
12.2 ASP.NET 2.0数据源控件模型...... 332
12.3 AS P.NET 2.0表格式数据源控件模型...... 333
12.3.1 IDataSource接口...... 333
12.3.2 DataSourceControl类背后的秘密...... 335
12.3.3 继承DataSourceControl基类...... 336
12.3.4 DataSourceView类...... 338
12.3.5 Delete方法...... 349
12.3.6 Update方法...... 353
12.3.7 Insert方法...... 357
12.3.8 状态管理...... 361
12.4 小结...... 362
第13章 ASP.NET 2.0数据源控件参数模型...... 363
13.1 Parameters类...... 363
13.2 Parameter类...... 366
13.2.1 OnParameterChanged方法...... 366
13.2.2 SaveCurrentValue方法...... 367
13.2.3 Evaluate方法...... 368
13.2.4 CookieParameter组件...... 368
13.2.5 ControlParameter组件...... 369
13.3 ParameterCollection类...... 371
13.3.1 ParametersChanged事件...... 371
13.3.2 OnInsert方法...... 372
13.3.3 GetValues方法...... 372
13.3.4 UpdateValues方法...... 374
13.4 自动调用GetValues和UpdateValues方法...... 374
13.4.1 ParameterCollection类型属性...... 374
13.4.2 OnInit和Page_LoadComplete方法...... 376
13.4.3 ExecuteSelect方法...... 377
13.4.4 ExecuteDelete方法...... 377
13.4.5 ExecuteUpdate方法...... 379
13.4.6 ExecuteInsert方法...... 381
13.5 综合应用...... 383
13.6 开发自定义参数...... 385
13.6.1 XmlWebServiceParameter组件...... 385
13.6.2 ObjectParameter组件...... 389
13.6.3 ClientParameter组件...... 392
13.7 小结...... 397
第14章 开发ASP.NET 2.0自定义表格式数据源控件...... 399
14.1 XmlWebServiceMethodInvoker组件...... 399
14.2 DataSourceControl类...... 401
14.3 DataSourceView类...... 402
14.3.1 ExecuteSelect方法...... 403
14.3.2 ExecuteUpdate方法...... 415
14.3.3 ExecuteInsert方法...... 421
14.3.4 ExecuteDelete方法...... 425
14.4 RetrieveMethodArgumentNamesAndValues方法...... 428
14.5 状态管理...... 430
14.6 小结...... 432
第15章 理解ASP.NET 2.0分层式数据源控件模型...... 433
15.1 IHierarchicalDataSource接口...... 434
15.2 HierarchicalDataSourceControl类...... 435
15.3 HierarchicalDataSourceView类...... 437
15.4 IHierarchyData接口...... 440
15.5 IHierarchicalEnumerable接口...... 441
15.5.1 XmlHierarchyData类...... 444
15.5.2 XmlHierarchicalEnumerable类...... 450
15.5.3 XmlHierarchyDataPropertyDescriptor类...... 451
15.5.4 ICustomTypeDescriptor接口...... 453
15.5.5 XmlHierarchicalDataSourceView.... 455
15.6 小结...... 456
第16章 开发ASP.NET 2.0自定义分层式数据源控件...... 457
16.1 CustomSqlDataSource控件...... 457
16.2 SqlHierarchyDataPropertyDescriptor类...... 463
16.3 SqlHierarchyData类...... 466
16.3.1 构造函数...... 466
16.3.2 实现HasChildren属性...... 467
16.3.3 实现Type属性...... 467
16.4 SqlHierarchicalEnumerable类...... 469
16.5 SqlHierarchicalDataSourceView类...... 471
16.6 小结...... 472
第17章 理解ASP.NET 2.0表格式数据绑定控件模型...... 473
17.1 本章概述...... 473
17.2 ASP.NET 1.x数据绑定控件模型...... 475
17.2.1 RetrieveData方法...... 475
17.2.2 重写DataBind方法...... 476
17.2.3 处理第3个数据绑定任务...... 476
17.3 BaseDataBoundControl类...... 477
17.3.1 自动调用DataBind方法...... 477
17.3.2 第一个和第二个数据绑定任务...... 478
17.3.3 第3个数据绑定任务...... 478
17.4 开发继承自BaseDataBoundControl的自定义数据绑定控件...... 480
17.4.1 处理Load事件...... 481
17.4.2 重写PerformSelect方法...... 481
17.4.3 以声明方式编程而不编写代码...... 483
17.4.4 CustomTable2控件的不足...... 484
17.5 DataBoundControl类...... 484
17.5.1 GetDataSource方法...... 485
17.5.2 GetData方法...... 486
17.5.3 重写BaseDataBoundControl的抽象方法...... 486
17.6 开发继承自DataBoundControl的自定义数据绑定控件...... 490
17.6.1 重写CreateDataSourceSelectArguments方法...... 490
17.6.2 重写PerformDataBinding方法...... 492
17.6.3 UpdateCallback方法...... 492
17.6.4 DeleteCallback方法...... 494
17.6.5 以声明方式实现针对未知数据的无代码编程...... 495
17.7 CompositeDataBoundControl类...... 496
17.7.1 重写PerformDataBinding方法...... 497
17.7.2 重写DataBind方法...... 498
17.7.3 重写CreateChildControls方法...... 498
17.7.4 重写Controls集合...... 499
17.8 开发继承自CompositeDataBoundControl的控件...... 499
17.8.1 MasterDetailForm控件...... 500
17.8.2 AddDetailRow方法...... 505
17.8.3 AddMasterCell方法...... 507
17.8.4 AddMasterHeaderCell方法...... 508
17.8.5 AddMasterSelectButton方法...... 508
17.8.6 AddDetailCommandBar方法...... 509
17.8.7 Delete数据操作...... 511
17.8.8 Update数据操作...... 512
17.8.9 Sort操作...... 513
17.8.10 控件状态...... 514
17.8.11 外观属性...... 516
17.8.12 无需编程实现主/从表...... 516
17.9 小结...... 518
第18章 ASP.NET 2.0数据控件字段模型...... 519
18.1 为什么需要ASP.NET 2.0数据控件字段模型...... 519
18.2 DataControlField组件...... 521
18.2.1 OnFieldChanged方法...... 523
18.2.2 Initialize方法...... 524
18.2.3 InitializeCell方法...... 524
18.2.4 ExtractValuesFromCell方法...... 525
18.3 BoundField... 526
18.3.1 InitializeCell方法...... 526
18.3.2 InitializeDataCell方法...... 527
18.3.3 OnDataBindField方法...... 527
18.3.4 GetValue方法...... 528
18.3.5 ExtractValuesFromCell方法...... 530
18.4 DataControlFieldCollection组件...... 531
18.4.1 FieldsChanged事件...... 531
18.4.2 OnInsert方法...... 532
18.5 开发自定义数据控件字段...... 532
18.5.1 DropDownListField... 533
18.5.2 CalendarField... 541
18.6 小结...... 546
第19章 开发ASP.NET 2.0自定义表格式数据绑定控件...... 547
19.1 继承自CompositeDataBoundControl. 548
19.2 重写CreateChildControls方法...... 548
19.2.1 初始化参数...... 550
19.2.2 描述主键字段...... 551
19.2.3 创建Table子控件...... 552
19.2.4 创建PagedDataSource对象...... 553
19.2.5 创建数据控件字段...... 554
19.2.6 创建顶部分页行...... 559
19.2.7 创建标题行...... 562
19.2.8 枚举数据记录...... 563
19.2.9 创建空数据行...... 565
19.2.10 创建和填充GridViewRowCollection... 566
19.2.11 CreateRow方法...... 567
19.2.12 InitializeRow方法...... 567
19.3 重写CreateDataSourceSelectArguments方法...... 568
19.4 重写CreateControlStyle方法...... 570
19.5 重写OnBubbleEvent方法...... 570
19.6 重写Render方法...... 578
19.7 状态管理...... 582
19.8 重写OnInit方法...... 584
19.9 事件...... 584
19.10 GridViewRow类...... 587
19.11 GridViewRowCollection类...... 591
19.12 小结...... 591
第20章 为什么需要ASP.NET 2.0成员资格/角色模型...... 593
20.1 ASP.NET 1.x安全模型...... 593
20.2 授权机制...... 599
20.3 ASP.NET 1.x安全模型的缺点...... 600
20.4 .NET 2.0提供程序模式...... 601
20.5 小结...... 602
第21章 理解ASP.NET 2.0成员资格模型...... 603
21.1 Membership类...... 603
21.1.1 成员资格提供程序的初始化和实例化...... 603
21.1.2 <membership>节...... 604
21.1.3 Provider和Providers属性...... 605
21.2 成员资格API.. 609
21.2.1 将新用户添加到数据存储中...... 609
21.2.2 从数据存储中删除用户...... 610
21.2.3 在数据存储中更新指定用户成员资格信息...... 611
21.2.4 根据数据存储验证用户凭证...... 611
21.2.5 在数据存储中查找用户...... 611
21.2.6 从数据存储中获取用户成员资格信息...... 613
21.2.7 强制设置应用程序特定的密码验证规则...... 614
21.2.8 访问用户在线时间窗口...... 616
21.3 开发自定义安全控件...... 617
21.3.1 Login控件...... 617
21.3.2 Register控件...... 622
21.3.3 使用Login和Register控件...... 624
21.3.4 注册SqlMembershipProvider.. 626
21.4 MembershipUser类...... 627
21.4.1 访问成员资格提供程序...... 629
21.4.2 重置并获取密码...... 629
21.4.3 修改密码...... 630
21.4.4 修改密码问题和答案...... 631
21.4.5 用户解锁...... 631
21.5 小结...... 632
第22章 开发自定义MembershipProvider和MembershipUser组件...... 633
22.1 MembershipProvider类...... 633
22.2 SqlMembershipProvider类...... 635
22.3 ProviderBase基类...... 635
22.4 MembershipProvider类...... 641
22.4.1 ChangePassword方法...... 642
22.4.2 ValidateUserInfo方法...... 644
22.4.3 UpdateUserInfo方法...... 648
22.4.4 Update方法...... 649
22.4.5 ChangePasswordQuestionAndAnswer方法...... 650
22.4.6 CreateUser方法...... 651
22.4.7 DeleteUser方法...... 656
22.4.8 FindUsersByEmail方法...... 657
22.4.9 FindUsersByName方法...... 658
22.4.10 GetAllUsers方法...... 660
22.4.11 Select方法...... 661
22.4.12 GetNumberOfUsersOnline方法...... 662
22.4.13 GetPassword方法...... 662
22.4.14 GetUser方法...... 665
22.4.15 GetUserNameByEmail方法...... 668
22.4.16 ResetPassword方法...... 668
22.4.17 UnlockUser方法...... 671
22.4.18 UpdateUser方法...... 672
22.4.19 ValidateUser方法...... 672
22.5 注册SqlMembershipProvider.. 673
22.6 使用自定义成员资格提供程序...... 674
22.7 扩展ASP.NET 2.0成员资格API.. 675
22.7.1 CustomMembershipUser类...... 676
22.7.2 CustomMembershipProvider类...... 677
22.7.3 CustomSqlMembershipProvider类...... 678
22.7.4 使用CustomMembershipUser、CustomMembershipProvider和 CustomSqlMembershipProvider.. 684
22.8 小结...... 686
第23章 理解ASP.NET角色管理模型...... 687
23.1 角色管理API.. 687
23.1.1 管理角色...... 688
23.1.2 管理用户...... 689
23.2 RolePrincipal类...... 691
23.2.1 身份...... 691
23.2.2 角色成员...... 692
23.2.3 IPrincipal接口...... 692
23.3 RoleManagerModule类...... 697
23.3.1 PostAuthenticateRequestCallback方法...... 698
23.3.2 GetRoles事件...... 699
23.3.3 EndRequestCallback方法...... 701
23.4 小结...... 702
第24章 开发自定义角色提供程序、模块和主体...... 703
24.1 RoleProvider基类...... 703
24.2 XmlRoleProvider.. 704
24.3 ProviderBase类...... 705
24.4 XML API.. 706
24.4.1 流XML API.. 707
24.4.2 随机访问XML API.. 711
24.5 实现RoleProvider类的方法...... 713
24.5.1 LoadData方法...... 714
24.5.2 SaveData方法...... 714
24.5.3 角色管理...... 715
24.5.4 用户管理...... 727
24.6 开发自定义角色主体...... 739
24.6.1 构造函数...... 740
24.6.2 GetRoles方法...... 742
24.6.3 实现IPrincipal接口...... 743
24.7 开发自定义角色管理模块...... 744
24.7.1 PostAuthenticateRequestCallback方法...... 745
24.7.2 GetRoles事件...... 747
24.7.3 EndRequestCallback方法...... 748
24.7.4 XmlRoleProvider和CacheDependency... 750
24.8 使用XmlRoleProvider.. 751
24.9 小结...... 756
第25章 开发基于提供程序的自定义服务...... 757
25.1 开发基于提供程序的自定义服务的方法...... 757
25.2 基于提供程序的RSS服务...... 758
25.3 自定义提供程序基类...... 759
25.4 自定义提供程序集合...... 760
25.5 配置Web.config和Machine.config文件...... 760
25.5.1 自定义配置节...... 761
25.5.2 注册<rssService>节...... 762
25.6 实现Service类...... 763
25.7 使用RSS服务...... 765
25.8 SqlRssProvider类...... 766
25.8.1 Initialize方法...... 766
25.8.2 LoadRss方法...... 772
25.8.3 GetDataReader方法...... 774
25.8.4 注册SqlRssProvider.. 774
25.9 RssHelper类...... 775
25.10 XmlRssProvider类...... 777
25.10.1 Initialize方法...... 778
25.10.2 LoadRss方法...... 781
25.10.3 RetrieveData方法...... 783
25.10.4 注册XmlRssProvider.. 784
25.11 小结...... 785
第26章 开发Ajax控件和组件:客户端功能...... 787
26.1 Ajax组件和控件...... 787
26.2 Ajax控件客户端功能的实现方法...... 789
26.3 呈现方式...... 790
26.3.1 将脚本呈现为HTML属性值...... 790
26.3.2 将客户端脚本呈现为脚本块...... 792
26.3.3 客户端脚本库...... 799
26.4 部署...... 802
26.4.1 将源文件部署到一个共享位置...... 803
26.4.2 将源文件嵌入程序集...... 803
26.5 呈现控件的客户端脚本的时机...... 811
26.5.1 禁用控件的客户端功能...... 811
26.5.2 检查请求浏览器的Ajax功能...... 812
26.6 呈现控件的客户端脚本的位置...... 813
26.6.1 重写OnPreRender方法...... 814
26.6.2 重写AddAttributesToRender方法...... 814
26.6.3 重写RenderContents方法...... 814
26.6.4 重写Render方法...... 815
26.7 退回到服务器端代码...... 815
26.8 开发Ajax控件...... 816
26.8.1 Ajax控件CustomImage.. 817
26.8.2 Ajax复合控件ImageDialog... 825
26.9 小结...... 840
第27章 开发Ajax控件和组件:异步客户端回调...... 841
27.1 为什么使用AjaxDropDownList控件...... 842
27.2 客户端回调机制...... 843
27.3 实现ASP.NET 2.0客户端回调机制...... 843
27.3.1 重写OnPreRender方法...... 844
27.3.2 重写Render方法...... 851
27.3.3 服务器端...... 852
27.4 ASP.NET 2.0客户端回调机制...... 853
27.4.1 重写OnPreRender方法...... 854
27.4.2 重写Render方法...... 856
27.4.3 服务器端...... 857
27.5 未知类型数据存储Ajax控件...... 858
27.6 主/次窗体...... 862
27.7 开发Ajax数据控件字段...... 863
27.8 AjaxDetailsDialog控件...... 866
27.8.1 将AjaxDetailsDialog实现为复合控件...... 869
27.8.2 将AjaxDetailsDialog实现为Ajax控件...... 872
27.9 AjaxField数据控件字段...... 879
27.9.1 重写InitializeCell方法...... 879
27.9.2 重写OnDataBindField方法...... 882
27.9.3 实现CreateField方法...... 884
27.9.4 重写ExtractValuesFromCell方法...... 884
27.10 DropDownListField2控件...... 885
27.10.1 重写InitializeCell方法...... 885
27.10.2 重写CreateField方法...... 888
27.10.3 重写ExtractValuesFromCell方法...... 888
27.11 Ajax控件CustomGridView.... 888
27.11.1 重写CreateChildTable方法...... 888
27.11.2 重写PrepareControlHierarchy方法...... 891
27.12 小结...... 897
第28章 开发Ajax控件和组件:Ajax模式...... 899
28.1 模式...... 899
28.2 Google的XML Web服务API.. 900
28.3 预测式获取(Predictive Fetch)模式...... 908
28.3.1 继承自WebControl基类...... 910
28.3.2 实现ICallbackEventHandler接口...... 927
28.4 小结...... 930
第29章 开发Ajax控件和组件:更多的Ajax模式...... 931
29.1 周期式刷新(Periodic Refresh)模式...... 931
29.1.1 继承自WebControl基类...... 932
29.1.2 实现ICallbackEventHandler接口...... 934
29.2 提交节流(Submission Throttling)模式...... 941
29.2.1 重写OnPreRender方法...... 942
29.2.2 重写Render方法...... 944
29.2.3 JavaScript函数...... 954
29.3 显式提交(Explicit Submission)模式...... 961
29.3.1 重写OnPreRender方法...... 961
29.3.2 重写Render方法...... 963
29.3.3 实现ICallbackEventHandler接口...... 965
29.3.4 JavaScript函数...... 966
29.4 小结...... 967
第30章 理解ASP.NET 2.0 Web部件框架...... 969
30.1 什么是ASP.NET Web部件框架...... 969
30.2 以声明方式开发WebPart控件...... 971
30.3 移动WebPart控件...... 975
30.4 个性化WebPart控件的属性...... 979
30.5 个性化WebPart控件的自定义属性...... 982
30.6 添加已声明的WebPart控件...... 984
30.7 添加已关闭的WebPart控件...... 986
30.8 导出WebPart控件...... 988
30.9 添加导入的WebPart控件...... 991
30.10 Web部件框架的主要组件...... 993
30.11 Part基类...... 994
30.12 小结...... 996
第31章 开发自定义WebPart、EditorPart和CatalogPart控件...... 997
31.1 WebPart基类...... 997
31.2 开发自定义WebPart控件...... 1001
31.2.1 CreateChildControls方法...... 1002
31.2.2 AddContainer方法...... 1004
31.2.3 AddItemToContainer方法...... 1004
31.2.4 使用RssReaderWebPart控件...... 1005
31.3 实现IWebPart接口...... 1006
31.4 IWebActionable接口...... 1006
31.4.1 开发自定义Web部件谓词...... 1008
31.4.2 开发支持自定义Web部件谓词的WebPart控件...... 1009
31.5 EditorPart基类...... 1014
31.6 开发自定义EditorPart控件...... 1015
31.6.1 将RssReaderEditorPart作为复合控件...... 1016
31.6.2 SyncChanges方法...... 1021
31.6.3 ApplyChanges方法...... 1022
31.6.4 OnLoad方法...... 1024
31.6.5 RssReaderWebPart4控件...... 1024
31.7 CatalogPart基类...... 1034
31.8 开发自定义CatalogPart控件...... 1038
31.8.1 GetAvailableWebPartDescriptions方法...... 1040
31.8.2 LoadWebPartInfoSet方法...... 1044
31.8.3 GetWebPart方法...... 1045
31.8.4 LoadWebPartDescriptionFile方法...... 1046
31.8.5 使用XmlWebServiceCatalogPart控件...... 1046
31.9 小结...... 1052
第32章 开发自定义WebPartZoneBase控件...... 1053
32.1 WebZone基类...... 1053
32.2 WebPartZoneBase基类...... 1056
32.2.1 继承自WebZone基类...... 1057
32.2.2 CreateWebPartChrome方法...... 1059
32.2.3 CreateInitialWebParts方法...... 1059
32.2.4 CreateVerbs事件...... 1059
32.2.5 实现IPostBackEventHandler接口...... 1060
32.3 WebPartZone类...... 1063
32.4 开发自定义WebPartZone控件...... 1065
32.4.1 XmlWebServiceWebPartZone类...... 1065
32.4.2 ProviderBasedWebPartZone类...... 1071
32.4.3 SqlDescriptionDocumentProvider类...... 1085
32.5 WebPartChrome类...... 1088
32.5.1 RenderWebPart方法...... 1089
32.5.2 PerformPreRender方法...... 1093
32.6 开发自定义WebPartChrome.. 1094
32.6.1 CustomWebPartZone类...... 1097
32.6.2 使用CustomWebPartChrome控件...... 1097
32.7 小结...... 1098
第33章 WebPartManager、Web部件连接和数据绑定WebPart控件...... 1099
33.1 开发自定义WebPartManager控件...... 1099
33.2 连接WebPart控件...... 1103
33.2.1 实现提供者和订阅者WebPart控件...... 1112
33.2.2 动态连接...... 1118
33.2.3 以编程方式实现连接...... 1123
33.3 开发数据绑定WebPart控件...... 1132
33.3.1 BaseDataBoundWebPart基类...... 1133
33.3.2 DataBoundWebPart基类...... 1135
33.3.3 CompositeDataBoundWebPart基类...... 1137
33.3.4 GridViewWebPart控件...... 1138
33.3.5 MasterDetailGridViewWebPart控件...... 1140
33.4 小结...... 1145
1.1 请求过程...... 1
1.2 为什么开发自定义组件...... 4
1.2.1 数据源控件...... 5
1.2.2 角色管理模块和主体...... 5
1.2.3 角色提供程序...... 6
1.2.4 成员资格提供程序...... 6
1.2.5 自定义XML Web服务和客户端...... 6
1.2.6 开发Ajax控件和组件...... 7
1.2.7 开发Web部件控件...... 7
1.2.8 开发自定义数据字段...... 7
1.2.9 开发自定义HTTP处理程序和模块...... 8
1.2.10 开发自定义的基于提供程序的服务...... 8
1.3 小结...... 8
第2章 开发简单的自定义控件和用户控件...... 9
2.1 隐藏信息...... 9
2.2 部署自定义控件...... 14
2.3 在Web页面中使用自定义控件...... 15
2.4 为自定义控件添加属性...... 16
2.5 为自定义控件添加设计时属性...... 19
2.5.1 属性(Property)层次属性(Attribute)...... 19
2.5.2 类层次属性(Attribute)...... 20
2.5.3 程序集层次属性(Attribute)...... 21
2.6 将自定义控件添加到Visual Studio工具箱...... 21
2.7 与HtmlTextWriter相关的枚举...... 22
2.8 状态管理...... 27
2.9 用户控件...... 30
2.9.1 使用用户控件...... 32
2.9.2 为用户控件添加属性...... 33
2.9.3 为用户控件添加方法...... 35
2.9.4 内部揭秘...... 37
2.10 小结...... 38
第3章 开发自定义控件样式...... 39
3.1 Style类...... 39
3.2 WebControl类...... 40
3.2.1 重写Render方法...... 45
3.2.2 TagKey属性...... 45
3.2.3 RenderBeginTag方法...... 45
3.2.4 AddAttributesToRender方法...... 46
3.2.5 RenderContents方法...... 50
3.2.6 RenderEndTag方法...... 50
3.3 继承WebControl类...... 51
3.4 开发自定义Style类...... 56
3.5 使用自定义Style类...... 60
3.6 小结...... 62
第4章 开发自定义控件事件...... 63
4.1 事件介绍...... 63
4.2 .NET事件设计模式...... 64
4.2.1 事件数据和事件委托类...... 64
4.2.2 引发自定义控件事件...... 66
4.3 事件优化...... 68
4.4 回传...... 70
4.4.1 C#接口实现模式...... 73
4.4.2 回传事件...... 74
4.4.3 回传数据...... 74
4.5 页面生命周期...... 84
4.6 小结...... 87
第5章 开发自定义复合控件...... 89
5.1 再次修改CreditCardForm6... 89
5.1.1 呈现HTML... 89
5.1.2 回传功能...... 94
5.2 创建复合控件...... 96
5.2.1 继承CompositeControl类...... 97
5.2.2 选定子控件...... 97
5.2.3 选定布局...... 97
5.2.4 实现自定义容器控件...... 98
5.2.5 创建容器控件...... 99
5.2.6 创建容器控件的子控件...... 100
5.2.7 为容器控件应用样式...... 103
5.2.8 将容器控件添加到复合控件...... 104
5.2.9 呈现容器控件...... 104
5.2.10 CreateChildControls方法:一站式构建子控件...... 105
5.2.11 TagKey属性...... 107
5.2.12 CreateControlStyle方法...... 107
5.2.13 公开样式属性...... 108
5.2.14 RenderContents方法...... 108
5.2.15 Label属性...... 110
5.2.16 事件冒泡...... 112
5.2.17 自定义控件从CompositeControl继承了什么...... 116
5.2.18 重写Controls集合...... 116
5.2.19 INamingContainer接口...... 117
5.3 小结...... 118
第6章 开发自定义模板控件...... 119
6.1 自定义容器控件内容...... 119
6.2 TemplatedCreditCardForm控件...... 121
6.3 在ASP.NET页面中使用模板...... 123
6.4 模板内幕...... 125
6.5 数据绑定表达式...... 128
6.6 数据绑定表达式内幕...... 133
6.7 默认模板...... 135
6.8 小结...... 144
第7章 开发包含复杂属性的自定义控件...... 145
7.1 容器控件的样式属性...... 145
7.2 自定义容器控件外观...... 146
7.3 状态管理...... 148
7.4 实现IStateManager接口的类型...... 150
7.4.1 DefaultTemplateManager类...... 151
7.4.2 TemplatedCreditCardForm3... 156
7.5 不实现IStateManager接口的类型...... 162
7.5.1 TypeConverter类...... 162
7.5.2 DefaultTemplateManager2类...... 163
7.5.3 DefaultTemplateManager2Converter类...... 164
7.5.4 使用转换器标记DefaultTemplateManager2类...... 167
7.5.5 使用不实现IStateManager接口的类...... 167
7.5.6 为什么需要使用TypeDescriptor.. 170
7.6 容器控件样式的状态管理...... 171
7.6.1 声明属性...... 171
7.6.2 TrackViewState方法...... 173
7.6.3 SaveViewState方法...... 174
7.6.4 LoadViewState方法...... 175
7.7 声明持久性...... 176
7.7.1 简单属性...... 176
7.7.2 复杂属性(连字符声明持久性)...... 177
7.7.3 复杂属性(内部属性声明持久性)...... 179
7.8 小结...... 181
第8章 ASP.NET请求处理框架...... 183
8.1 请求过程...... 183
8.2 HTTP模块...... 186
8.3 HTTP处理程序...... 187
8.4 HTTP处理程序工厂...... 188
8.5 控件生成器...... 188
8.6 开发自定义HTTP模块...... 195
8.7 注册自定义HTTP模块...... 198
8.8 开发自定义HTTP处理程序工厂...... 198
8.9 开发自定义HTTP处理程序...... 200
8.9.1 RSS... 200
8.9.2 RssHandler.. 201
8.9.3 注册自定义HTTP处理程序...... 204
8.10 开发自定义控件生成器...... 206
8.10.1 开发自定义控件生成器CompositeCreditCardForm2Builder.. 209
8.10.2 开发自定义控件CompositeCreditCardForm2... 210
8.11 小结...... 215
第9章 数据绑定...... 217
9.1 CustomTable控件...... 217
9.2 设置数据源...... 218
9.3 重写CreateChildControls方法...... 219
9.4 重写DataBind方法...... 221
9.5 创建控件层次...... 222
9.5.1 DataControlField类...... 224
9.5.2 CreateFields方法...... 225
9.5.3 CreateHeaderRow方法...... 227
9.5.4 CreateBodyRow方法...... 228
9.5.5 CachePrimaryKey方法...... 233
9.5.6 CreatePagerRow方法...... 234
9.6 重写CreateControlStyle属方法...... 235
9.7 实现CustomTable事件...... 236
9.8 重写OnBubbleEvent. 237
9.9 CustomTableRow类...... 238
9.10 CustomTableRowCollection类...... 240
9.11 子控件样式...... 241
9.12 重写Render方法...... 242
9.13 状态管理...... 244
9.13.1 TrackViewState方法...... 244
9.13.2 SaveViewState方法...... 245
9.13.3 LoadViewState方法...... 246
9.14 在页面中使用CustomTable控件...... 248
9.15 CustomTable控件的缺点...... 249
9.16 小结...... 249
第10章 XML Web服务...... 251
10.1 开发和使用XML Web服务...... 251
10.2 添加引用按钮背后的秘密...... 254
10.3 WSDL文档...... 257
10.3.1 参数的名称、类型和顺序...... 259
10.3.2 返回值的类型和顺序...... 259
10.3.3 描述方法...... 260
10.3.4 描述访问XML Web服务方法的通信协议...... 261
10.3.5 为方法访问设置站点...... 262
10.3.6 设置方法的类...... 262
10.4 XmlWebServiceMethodInvoker类...... 262
10.4.1 以编程方式下载WSDL文档...... 263
10.4.2 根据WSDL文档反序列化一个.NET对象...... 264
10.4.3 为代理类生成代码...... 265
10.4.4 Import方法背后的秘密...... 266
10.4.5 编译代理类代码...... 269
10.4.6 创建代理类实例...... 270
10.4.7 调用代理类实例中的特定方法...... 270
10.4.8 总结:The InvokeXmlWebServiceMethod方法...... 274
10.5 如何使用XmlWebServiceMethodInvoker.. 275
10.6 缓存编译后的代理类...... 277
10.6.1 缓存相关属性...... 278
10.6.2 CompileCodeForProxyClass方法...... 278
10.6.3 InvokeXmlWebServiceMethod方法...... 280
10.6.4 使用缓存功能...... 281
10.7 开发XML Web服务自定义控件...... 284
10.8 XmlWebServiceResolver组件...... 286
10.8.1 XMLResolver类...... 286
10.8.2 GetEntity方法...... 290
10.9 小结...... 294
第11章 实现架构导入扩展和ISerializable接口...... 295
11.1 实现IXmlSerializable接口...... 295
11.1.1 实现服务器端组件...... 296
11.1.2 开发客户端组件...... 301
11.2 开发自定义架构导入扩展...... 303
11.2.1 使用喜欢的语言编写代码...... 305
11.2.2 CodeDom方法...... 305
11.3 注册自定义架构导入扩展...... 319
11.4 以块化方式发送和接收数据...... 321
11.4.1 BookContent类...... 321
11.4.2 ForumBook类...... 324
11.4.3 自定义架构导入扩展...... 325
11.5 XmlWebServiceMethodInvoker的可扩展能力...... 326
11.6 小结...... 326
第12章 理解ASP.NET 2.0表格式数据源控件模型...... 327
12.1 为什么需要ASP.NET 2.0数据源控件模型...... 327
12.1.1 获取数据...... 329
12.1.2 Update事件...... 330
12.2 ASP.NET 2.0数据源控件模型...... 332
12.3 AS P.NET 2.0表格式数据源控件模型...... 333
12.3.1 IDataSource接口...... 333
12.3.2 DataSourceControl类背后的秘密...... 335
12.3.3 继承DataSourceControl基类...... 336
12.3.4 DataSourceView类...... 338
12.3.5 Delete方法...... 349
12.3.6 Update方法...... 353
12.3.7 Insert方法...... 357
12.3.8 状态管理...... 361
12.4 小结...... 362
第13章 ASP.NET 2.0数据源控件参数模型...... 363
13.1 Parameters类...... 363
13.2 Parameter类...... 366
13.2.1 OnParameterChanged方法...... 366
13.2.2 SaveCurrentValue方法...... 367
13.2.3 Evaluate方法...... 368
13.2.4 CookieParameter组件...... 368
13.2.5 ControlParameter组件...... 369
13.3 ParameterCollection类...... 371
13.3.1 ParametersChanged事件...... 371
13.3.2 OnInsert方法...... 372
13.3.3 GetValues方法...... 372
13.3.4 UpdateValues方法...... 374
13.4 自动调用GetValues和UpdateValues方法...... 374
13.4.1 ParameterCollection类型属性...... 374
13.4.2 OnInit和Page_LoadComplete方法...... 376
13.4.3 ExecuteSelect方法...... 377
13.4.4 ExecuteDelete方法...... 377
13.4.5 ExecuteUpdate方法...... 379
13.4.6 ExecuteInsert方法...... 381
13.5 综合应用...... 383
13.6 开发自定义参数...... 385
13.6.1 XmlWebServiceParameter组件...... 385
13.6.2 ObjectParameter组件...... 389
13.6.3 ClientParameter组件...... 392
13.7 小结...... 397
第14章 开发ASP.NET 2.0自定义表格式数据源控件...... 399
14.1 XmlWebServiceMethodInvoker组件...... 399
14.2 DataSourceControl类...... 401
14.3 DataSourceView类...... 402
14.3.1 ExecuteSelect方法...... 403
14.3.2 ExecuteUpdate方法...... 415
14.3.3 ExecuteInsert方法...... 421
14.3.4 ExecuteDelete方法...... 425
14.4 RetrieveMethodArgumentNamesAndValues方法...... 428
14.5 状态管理...... 430
14.6 小结...... 432
第15章 理解ASP.NET 2.0分层式数据源控件模型...... 433
15.1 IHierarchicalDataSource接口...... 434
15.2 HierarchicalDataSourceControl类...... 435
15.3 HierarchicalDataSourceView类...... 437
15.4 IHierarchyData接口...... 440
15.5 IHierarchicalEnumerable接口...... 441
15.5.1 XmlHierarchyData类...... 444
15.5.2 XmlHierarchicalEnumerable类...... 450
15.5.3 XmlHierarchyDataPropertyDescriptor类...... 451
15.5.4 ICustomTypeDescriptor接口...... 453
15.5.5 XmlHierarchicalDataSourceView.... 455
15.6 小结...... 456
第16章 开发ASP.NET 2.0自定义分层式数据源控件...... 457
16.1 CustomSqlDataSource控件...... 457
16.2 SqlHierarchyDataPropertyDescriptor类...... 463
16.3 SqlHierarchyData类...... 466
16.3.1 构造函数...... 466
16.3.2 实现HasChildren属性...... 467
16.3.3 实现Type属性...... 467
16.4 SqlHierarchicalEnumerable类...... 469
16.5 SqlHierarchicalDataSourceView类...... 471
16.6 小结...... 472
第17章 理解ASP.NET 2.0表格式数据绑定控件模型...... 473
17.1 本章概述...... 473
17.2 ASP.NET 1.x数据绑定控件模型...... 475
17.2.1 RetrieveData方法...... 475
17.2.2 重写DataBind方法...... 476
17.2.3 处理第3个数据绑定任务...... 476
17.3 BaseDataBoundControl类...... 477
17.3.1 自动调用DataBind方法...... 477
17.3.2 第一个和第二个数据绑定任务...... 478
17.3.3 第3个数据绑定任务...... 478
17.4 开发继承自BaseDataBoundControl的自定义数据绑定控件...... 480
17.4.1 处理Load事件...... 481
17.4.2 重写PerformSelect方法...... 481
17.4.3 以声明方式编程而不编写代码...... 483
17.4.4 CustomTable2控件的不足...... 484
17.5 DataBoundControl类...... 484
17.5.1 GetDataSource方法...... 485
17.5.2 GetData方法...... 486
17.5.3 重写BaseDataBoundControl的抽象方法...... 486
17.6 开发继承自DataBoundControl的自定义数据绑定控件...... 490
17.6.1 重写CreateDataSourceSelectArguments方法...... 490
17.6.2 重写PerformDataBinding方法...... 492
17.6.3 UpdateCallback方法...... 492
17.6.4 DeleteCallback方法...... 494
17.6.5 以声明方式实现针对未知数据的无代码编程...... 495
17.7 CompositeDataBoundControl类...... 496
17.7.1 重写PerformDataBinding方法...... 497
17.7.2 重写DataBind方法...... 498
17.7.3 重写CreateChildControls方法...... 498
17.7.4 重写Controls集合...... 499
17.8 开发继承自CompositeDataBoundControl的控件...... 499
17.8.1 MasterDetailForm控件...... 500
17.8.2 AddDetailRow方法...... 505
17.8.3 AddMasterCell方法...... 507
17.8.4 AddMasterHeaderCell方法...... 508
17.8.5 AddMasterSelectButton方法...... 508
17.8.6 AddDetailCommandBar方法...... 509
17.8.7 Delete数据操作...... 511
17.8.8 Update数据操作...... 512
17.8.9 Sort操作...... 513
17.8.10 控件状态...... 514
17.8.11 外观属性...... 516
17.8.12 无需编程实现主/从表...... 516
17.9 小结...... 518
第18章 ASP.NET 2.0数据控件字段模型...... 519
18.1 为什么需要ASP.NET 2.0数据控件字段模型...... 519
18.2 DataControlField组件...... 521
18.2.1 OnFieldChanged方法...... 523
18.2.2 Initialize方法...... 524
18.2.3 InitializeCell方法...... 524
18.2.4 ExtractValuesFromCell方法...... 525
18.3 BoundField... 526
18.3.1 InitializeCell方法...... 526
18.3.2 InitializeDataCell方法...... 527
18.3.3 OnDataBindField方法...... 527
18.3.4 GetValue方法...... 528
18.3.5 ExtractValuesFromCell方法...... 530
18.4 DataControlFieldCollection组件...... 531
18.4.1 FieldsChanged事件...... 531
18.4.2 OnInsert方法...... 532
18.5 开发自定义数据控件字段...... 532
18.5.1 DropDownListField... 533
18.5.2 CalendarField... 541
18.6 小结...... 546
第19章 开发ASP.NET 2.0自定义表格式数据绑定控件...... 547
19.1 继承自CompositeDataBoundControl. 548
19.2 重写CreateChildControls方法...... 548
19.2.1 初始化参数...... 550
19.2.2 描述主键字段...... 551
19.2.3 创建Table子控件...... 552
19.2.4 创建PagedDataSource对象...... 553
19.2.5 创建数据控件字段...... 554
19.2.6 创建顶部分页行...... 559
19.2.7 创建标题行...... 562
19.2.8 枚举数据记录...... 563
19.2.9 创建空数据行...... 565
19.2.10 创建和填充GridViewRowCollection... 566
19.2.11 CreateRow方法...... 567
19.2.12 InitializeRow方法...... 567
19.3 重写CreateDataSourceSelectArguments方法...... 568
19.4 重写CreateControlStyle方法...... 570
19.5 重写OnBubbleEvent方法...... 570
19.6 重写Render方法...... 578
19.7 状态管理...... 582
19.8 重写OnInit方法...... 584
19.9 事件...... 584
19.10 GridViewRow类...... 587
19.11 GridViewRowCollection类...... 591
19.12 小结...... 591
第20章 为什么需要ASP.NET 2.0成员资格/角色模型...... 593
20.1 ASP.NET 1.x安全模型...... 593
20.2 授权机制...... 599
20.3 ASP.NET 1.x安全模型的缺点...... 600
20.4 .NET 2.0提供程序模式...... 601
20.5 小结...... 602
第21章 理解ASP.NET 2.0成员资格模型...... 603
21.1 Membership类...... 603
21.1.1 成员资格提供程序的初始化和实例化...... 603
21.1.2 <membership>节...... 604
21.1.3 Provider和Providers属性...... 605
21.2 成员资格API.. 609
21.2.1 将新用户添加到数据存储中...... 609
21.2.2 从数据存储中删除用户...... 610
21.2.3 在数据存储中更新指定用户成员资格信息...... 611
21.2.4 根据数据存储验证用户凭证...... 611
21.2.5 在数据存储中查找用户...... 611
21.2.6 从数据存储中获取用户成员资格信息...... 613
21.2.7 强制设置应用程序特定的密码验证规则...... 614
21.2.8 访问用户在线时间窗口...... 616
21.3 开发自定义安全控件...... 617
21.3.1 Login控件...... 617
21.3.2 Register控件...... 622
21.3.3 使用Login和Register控件...... 624
21.3.4 注册SqlMembershipProvider.. 626
21.4 MembershipUser类...... 627
21.4.1 访问成员资格提供程序...... 629
21.4.2 重置并获取密码...... 629
21.4.3 修改密码...... 630
21.4.4 修改密码问题和答案...... 631
21.4.5 用户解锁...... 631
21.5 小结...... 632
第22章 开发自定义MembershipProvider和MembershipUser组件...... 633
22.1 MembershipProvider类...... 633
22.2 SqlMembershipProvider类...... 635
22.3 ProviderBase基类...... 635
22.4 MembershipProvider类...... 641
22.4.1 ChangePassword方法...... 642
22.4.2 ValidateUserInfo方法...... 644
22.4.3 UpdateUserInfo方法...... 648
22.4.4 Update方法...... 649
22.4.5 ChangePasswordQuestionAndAnswer方法...... 650
22.4.6 CreateUser方法...... 651
22.4.7 DeleteUser方法...... 656
22.4.8 FindUsersByEmail方法...... 657
22.4.9 FindUsersByName方法...... 658
22.4.10 GetAllUsers方法...... 660
22.4.11 Select方法...... 661
22.4.12 GetNumberOfUsersOnline方法...... 662
22.4.13 GetPassword方法...... 662
22.4.14 GetUser方法...... 665
22.4.15 GetUserNameByEmail方法...... 668
22.4.16 ResetPassword方法...... 668
22.4.17 UnlockUser方法...... 671
22.4.18 UpdateUser方法...... 672
22.4.19 ValidateUser方法...... 672
22.5 注册SqlMembershipProvider.. 673
22.6 使用自定义成员资格提供程序...... 674
22.7 扩展ASP.NET 2.0成员资格API.. 675
22.7.1 CustomMembershipUser类...... 676
22.7.2 CustomMembershipProvider类...... 677
22.7.3 CustomSqlMembershipProvider类...... 678
22.7.4 使用CustomMembershipUser、CustomMembershipProvider和 CustomSqlMembershipProvider.. 684
22.8 小结...... 686
第23章 理解ASP.NET角色管理模型...... 687
23.1 角色管理API.. 687
23.1.1 管理角色...... 688
23.1.2 管理用户...... 689
23.2 RolePrincipal类...... 691
23.2.1 身份...... 691
23.2.2 角色成员...... 692
23.2.3 IPrincipal接口...... 692
23.3 RoleManagerModule类...... 697
23.3.1 PostAuthenticateRequestCallback方法...... 698
23.3.2 GetRoles事件...... 699
23.3.3 EndRequestCallback方法...... 701
23.4 小结...... 702
第24章 开发自定义角色提供程序、模块和主体...... 703
24.1 RoleProvider基类...... 703
24.2 XmlRoleProvider.. 704
24.3 ProviderBase类...... 705
24.4 XML API.. 706
24.4.1 流XML API.. 707
24.4.2 随机访问XML API.. 711
24.5 实现RoleProvider类的方法...... 713
24.5.1 LoadData方法...... 714
24.5.2 SaveData方法...... 714
24.5.3 角色管理...... 715
24.5.4 用户管理...... 727
24.6 开发自定义角色主体...... 739
24.6.1 构造函数...... 740
24.6.2 GetRoles方法...... 742
24.6.3 实现IPrincipal接口...... 743
24.7 开发自定义角色管理模块...... 744
24.7.1 PostAuthenticateRequestCallback方法...... 745
24.7.2 GetRoles事件...... 747
24.7.3 EndRequestCallback方法...... 748
24.7.4 XmlRoleProvider和CacheDependency... 750
24.8 使用XmlRoleProvider.. 751
24.9 小结...... 756
第25章 开发基于提供程序的自定义服务...... 757
25.1 开发基于提供程序的自定义服务的方法...... 757
25.2 基于提供程序的RSS服务...... 758
25.3 自定义提供程序基类...... 759
25.4 自定义提供程序集合...... 760
25.5 配置Web.config和Machine.config文件...... 760
25.5.1 自定义配置节...... 761
25.5.2 注册<rssService>节...... 762
25.6 实现Service类...... 763
25.7 使用RSS服务...... 765
25.8 SqlRssProvider类...... 766
25.8.1 Initialize方法...... 766
25.8.2 LoadRss方法...... 772
25.8.3 GetDataReader方法...... 774
25.8.4 注册SqlRssProvider.. 774
25.9 RssHelper类...... 775
25.10 XmlRssProvider类...... 777
25.10.1 Initialize方法...... 778
25.10.2 LoadRss方法...... 781
25.10.3 RetrieveData方法...... 783
25.10.4 注册XmlRssProvider.. 784
25.11 小结...... 785
第26章 开发Ajax控件和组件:客户端功能...... 787
26.1 Ajax组件和控件...... 787
26.2 Ajax控件客户端功能的实现方法...... 789
26.3 呈现方式...... 790
26.3.1 将脚本呈现为HTML属性值...... 790
26.3.2 将客户端脚本呈现为脚本块...... 792
26.3.3 客户端脚本库...... 799
26.4 部署...... 802
26.4.1 将源文件部署到一个共享位置...... 803
26.4.2 将源文件嵌入程序集...... 803
26.5 呈现控件的客户端脚本的时机...... 811
26.5.1 禁用控件的客户端功能...... 811
26.5.2 检查请求浏览器的Ajax功能...... 812
26.6 呈现控件的客户端脚本的位置...... 813
26.6.1 重写OnPreRender方法...... 814
26.6.2 重写AddAttributesToRender方法...... 814
26.6.3 重写RenderContents方法...... 814
26.6.4 重写Render方法...... 815
26.7 退回到服务器端代码...... 815
26.8 开发Ajax控件...... 816
26.8.1 Ajax控件CustomImage.. 817
26.8.2 Ajax复合控件ImageDialog... 825
26.9 小结...... 840
第27章 开发Ajax控件和组件:异步客户端回调...... 841
27.1 为什么使用AjaxDropDownList控件...... 842
27.2 客户端回调机制...... 843
27.3 实现ASP.NET 2.0客户端回调机制...... 843
27.3.1 重写OnPreRender方法...... 844
27.3.2 重写Render方法...... 851
27.3.3 服务器端...... 852
27.4 ASP.NET 2.0客户端回调机制...... 853
27.4.1 重写OnPreRender方法...... 854
27.4.2 重写Render方法...... 856
27.4.3 服务器端...... 857
27.5 未知类型数据存储Ajax控件...... 858
27.6 主/次窗体...... 862
27.7 开发Ajax数据控件字段...... 863
27.8 AjaxDetailsDialog控件...... 866
27.8.1 将AjaxDetailsDialog实现为复合控件...... 869
27.8.2 将AjaxDetailsDialog实现为Ajax控件...... 872
27.9 AjaxField数据控件字段...... 879
27.9.1 重写InitializeCell方法...... 879
27.9.2 重写OnDataBindField方法...... 882
27.9.3 实现CreateField方法...... 884
27.9.4 重写ExtractValuesFromCell方法...... 884
27.10 DropDownListField2控件...... 885
27.10.1 重写InitializeCell方法...... 885
27.10.2 重写CreateField方法...... 888
27.10.3 重写ExtractValuesFromCell方法...... 888
27.11 Ajax控件CustomGridView.... 888
27.11.1 重写CreateChildTable方法...... 888
27.11.2 重写PrepareControlHierarchy方法...... 891
27.12 小结...... 897
第28章 开发Ajax控件和组件:Ajax模式...... 899
28.1 模式...... 899
28.2 Google的XML Web服务API.. 900
28.3 预测式获取(Predictive Fetch)模式...... 908
28.3.1 继承自WebControl基类...... 910
28.3.2 实现ICallbackEventHandler接口...... 927
28.4 小结...... 930
第29章 开发Ajax控件和组件:更多的Ajax模式...... 931
29.1 周期式刷新(Periodic Refresh)模式...... 931
29.1.1 继承自WebControl基类...... 932
29.1.2 实现ICallbackEventHandler接口...... 934
29.2 提交节流(Submission Throttling)模式...... 941
29.2.1 重写OnPreRender方法...... 942
29.2.2 重写Render方法...... 944
29.2.3 JavaScript函数...... 954
29.3 显式提交(Explicit Submission)模式...... 961
29.3.1 重写OnPreRender方法...... 961
29.3.2 重写Render方法...... 963
29.3.3 实现ICallbackEventHandler接口...... 965
29.3.4 JavaScript函数...... 966
29.4 小结...... 967
第30章 理解ASP.NET 2.0 Web部件框架...... 969
30.1 什么是ASP.NET Web部件框架...... 969
30.2 以声明方式开发WebPart控件...... 971
30.3 移动WebPart控件...... 975
30.4 个性化WebPart控件的属性...... 979
30.5 个性化WebPart控件的自定义属性...... 982
30.6 添加已声明的WebPart控件...... 984
30.7 添加已关闭的WebPart控件...... 986
30.8 导出WebPart控件...... 988
30.9 添加导入的WebPart控件...... 991
30.10 Web部件框架的主要组件...... 993
30.11 Part基类...... 994
30.12 小结...... 996
第31章 开发自定义WebPart、EditorPart和CatalogPart控件...... 997
31.1 WebPart基类...... 997
31.2 开发自定义WebPart控件...... 1001
31.2.1 CreateChildControls方法...... 1002
31.2.2 AddContainer方法...... 1004
31.2.3 AddItemToContainer方法...... 1004
31.2.4 使用RssReaderWebPart控件...... 1005
31.3 实现IWebPart接口...... 1006
31.4 IWebActionable接口...... 1006
31.4.1 开发自定义Web部件谓词...... 1008
31.4.2 开发支持自定义Web部件谓词的WebPart控件...... 1009
31.5 EditorPart基类...... 1014
31.6 开发自定义EditorPart控件...... 1015
31.6.1 将RssReaderEditorPart作为复合控件...... 1016
31.6.2 SyncChanges方法...... 1021
31.6.3 ApplyChanges方法...... 1022
31.6.4 OnLoad方法...... 1024
31.6.5 RssReaderWebPart4控件...... 1024
31.7 CatalogPart基类...... 1034
31.8 开发自定义CatalogPart控件...... 1038
31.8.1 GetAvailableWebPartDescriptions方法...... 1040
31.8.2 LoadWebPartInfoSet方法...... 1044
31.8.3 GetWebPart方法...... 1045
31.8.4 LoadWebPartDescriptionFile方法...... 1046
31.8.5 使用XmlWebServiceCatalogPart控件...... 1046
31.9 小结...... 1052
第32章 开发自定义WebPartZoneBase控件...... 1053
32.1 WebZone基类...... 1053
32.2 WebPartZoneBase基类...... 1056
32.2.1 继承自WebZone基类...... 1057
32.2.2 CreateWebPartChrome方法...... 1059
32.2.3 CreateInitialWebParts方法...... 1059
32.2.4 CreateVerbs事件...... 1059
32.2.5 实现IPostBackEventHandler接口...... 1060
32.3 WebPartZone类...... 1063
32.4 开发自定义WebPartZone控件...... 1065
32.4.1 XmlWebServiceWebPartZone类...... 1065
32.4.2 ProviderBasedWebPartZone类...... 1071
32.4.3 SqlDescriptionDocumentProvider类...... 1085
32.5 WebPartChrome类...... 1088
32.5.1 RenderWebPart方法...... 1089
32.5.2 PerformPreRender方法...... 1093
32.6 开发自定义WebPartChrome.. 1094
32.6.1 CustomWebPartZone类...... 1097
32.6.2 使用CustomWebPartChrome控件...... 1097
32.7 小结...... 1098
第33章 WebPartManager、Web部件连接和数据绑定WebPart控件...... 1099
33.1 开发自定义WebPartManager控件...... 1099
33.2 连接WebPart控件...... 1103
33.2.1 实现提供者和订阅者WebPart控件...... 1112
33.2.2 动态连接...... 1118
33.2.3 以编程方式实现连接...... 1123
33.3 开发数据绑定WebPart控件...... 1132
33.3.1 BaseDataBoundWebPart基类...... 1133
33.3.2 DataBoundWebPart基类...... 1135
33.3.3 CompositeDataBoundWebPart基类...... 1137
33.3.4 GridViewWebPart控件...... 1138
33.3.5 MasterDetailGridViewWebPart控件...... 1140
33.4 小结...... 1145
第1章 ASP.NET 2.0框架...... 1
1.1 请求过程...... 1
1.2 为什么开发自定义组件...... 4
1.2.1 数据源控件...... 5
1.2.2 角色管理模块和主体...... 5
1.2.3 角色提供程序...... 6
1.2.4 成员资格提供程序...... 6
1.2.5 自定义XML Web服务和客户端...... 6
1.2.6 开发Ajax控件和组件...... 7
1.2.7 开发Web部件控件...... 7
1.2.8 开发自定义数据字段...... 7
1.2.9 开发自定义HTTP处理程序和模块...... 8
1.2.10 开发自定义的基于提供程序的服务...... 8
1.3 小结...... 8
第2章 开发简单的自定义控件和用户控件...... 9
2.1 隐藏信息...... 9
2.2 部署自定义控件...... 14
2.3 在Web页面中使用自定义控件...... 15
2.4 为自定义控件添加属性...... 16
2.5 为自定义控件添加设计时属性...... 19
2.5.1 属性(Property)层次属性(Attribute)...... 19
2.5.2 类层次属性(Attribute)...... 20
2.5.3 程序集层次属性(Attribute)...... 21
2.6 将自定义控件添加到Visual Studio工具箱...... 21
2.7 与HtmlTextWriter相关的枚举...... 22
2.8 状态管理...... 27
2.9 用户控件...... 30
2.9.1 使用用户控件...... 32
2.9.2 为用户控件添加属性...... 33
2.9.3 为用户控件添加方法...... 35
2.9.4 内部揭秘...... 37
2.10 小结...... 38
第3章 开发自定义控件样式...... 39
3.1 Style类...... 39
3.2 WebControl类...... 40
3.2.1 重写Render方法...... 45
3.2.2 TagKey属性...... 45
3.2.3 RenderBeginTag方法...... 45
3.2.4 AddAttributesToRender方法...... 46
3.2.5 RenderContents方法...... 50
3.2.6 RenderEndTag方法...... 50
3.3 继承WebControl类...... 51
3.4 开发自定义Style类...... 56
3.5 使用自定义Style类...... 60
3.6 小结...... 62
第4章 开发自定义控件事件...... 63
4.1 事件介绍...... 63
4.2 .NET事件设计模式...... 64
4.2.1 事件数据和事件委托类...... 64
4.2.2 引发自定义控件事件...... 66
4.3 事件优化...... 68
4.4 回传...... 70
4.4.1 C#接口实现模式...... 73
4.4.2 回传事件...... 74
4.4.3 回传数据...... 74
4.5 页面生命周期...... 84
4.6 小结...... 87
第5章 开发自定义复合控件...... 89
5.1 再次修改CreditCardForm6... 89
5.1.1 呈现HTML... 89
5.1.2 回传功能...... 94
5.2 创建复合控件...... 96
5.2.1 继承CompositeControl类...... 97
5.2.2 选定子控件...... 97
5.2.3 选定布局...... 97
5.2.4 实现自定义容器控件...... 98
5.2.5 创建容器控件...... 99
5.2.6 创建容器控件的子控件...... 100
5.2.7 为容器控件应用样式...... 103
5.2.8 将容器控件添加到复合控件...... 104
5.2.9 呈现容器控件...... 104
5.2.10 CreateChildControls方法:一站式构建子控件...... 105
5.2.11 TagKey属性...... 107
5.2.12 CreateControlStyle方法...... 107
5.2.13 公开样式属性...... 108
5.2.14 RenderContents方法...... 108
5.2.15 Label属性...... 110
5.2.16 事件冒泡...... 112
5.2.17 自定义控件从CompositeControl继承了什么...... 116
5.2.18 重写Controls集合...... 116
5.2.19 INamingContainer接口...... 117
5.3 小结...... 118
第6章 开发自定义模板控件...... 119
6.1 自定义容器控件内容...... 119
6.2 TemplatedCreditCardForm控件...... 121
6.3 在ASP.NET页面中使用模板...... 123
6.4 模板内幕...... 125
6.5 数据绑定表达式...... 128
6.6 数据绑定表达式内幕...... 133
6.7 默认模板...... 135
6.8 小结...... 144
第7章 开发包含复杂属性的自定义控件...... 145
7.1 容器控件的样式属性...... 145
7.2 自定义容器控件外观...... 146
7.3 状态管理...... 148
7.4 实现IStateManager接口的类型...... 150
7.4.1 DefaultTemplateManager类...... 151
7.4.2 TemplatedCreditCardForm3... 156
7.5 不实现IStateManager接口的类型...... 162
7.5.1 TypeConverter类...... 162
7.5.2 DefaultTemplateManager2类...... 163
7.5.3 DefaultTemplateManager2Converter类...... 164
7.5.4 使用转换器标记DefaultTemplateManager2类...... 167
7.5.5 使用不实现IStateManager接口的类...... 167
7.5.6 为什么需要使用TypeDescriptor.. 170
7.6 容器控件样式的状态管理...... 171
7.6.1 声明属性...... 171
7.6.2 TrackViewState方法...... 173
7.6.3 SaveViewState方法...... 174
7.6.4 LoadViewState方法...... 175
7.7 声明持久性...... 176
7.7.1 简单属性...... 176
7.7.2 复杂属性(连字符声明持久性)...... 177
7.7.3 复杂属性(内部属性声明持久性)...... 179
7.8 小结...... 181
第8章 ASP.NET请求处理框架...... 183
8.1 请求过程...... 183
8.2 HTTP模块...... 186
8.3 HTTP处理程序...... 187
8.4 HTTP处理程序工厂...... 188
8.5 控件生成器...... 188
8.6 开发自定义HTTP模块...... 195
8.7 注册自定义HTTP模块...... 198
8.8 开发自定义HTTP处理程序工厂...... 198
8.9 开发自定义HTTP处理程序...... 200
8.9.1 RSS... 200
8.9.2 RssHandler.. 201
8.9.3 注册自定义HTTP处理程序...... 204
8.10 开发自定义控件生成器...... 206
8.10.1 开发自定义控件生成器CompositeCreditCardForm2Builder.. 209
8.10.2 开发自定义控件CompositeCreditCardForm2... 210
8.11 小结...... 215
第9章 数据绑定...... 217
9.1 CustomTable控件...... 217
9.2 设置数据源...... 218
9.3 重写CreateChildControls方法...... 219
9.4 重写DataBind方法...... 221
9.5 创建控件层次...... 222
9.5.1 DataControlField类...... 224
9.5.2 CreateFields方法...... 225
9.5.3 CreateHeaderRow方法...... 227
9.5.4 CreateBodyRow方法...... 228
9.5.5 CachePrimaryKey方法...... 233
9.5.6 CreatePagerRow方法...... 234
9.6 重写CreateControlStyle属方法...... 235
9.7 实现CustomTable事件...... 236
9.8 重写OnBubbleEvent. 237
9.9 CustomTableRow类...... 238
9.10 CustomTableRowCollection类...... 240
9.11 子控件样式...... 241
9.12 重写Render方法...... 242
9.13 状态管理...... 244
9.13.1 TrackViewState方法...... 244
9.13.2 SaveViewState方法...... 245
9.13.3 LoadViewState方法...... 246
9.14 在页面中使用CustomTable控件...... 248
9.15 CustomTable控件的缺点...... 249
9.16 小结...... 249
第10章 XML Web服务...... 251
10.1 开发和使用XML Web服务...... 251
10.2 添加引用按钮背后的秘密...... 254
10.3 WSDL文档...... 257
10.3.1 参数的名称、类型和顺序...... 259
10.3.2 返回值的类型和顺序...... 259
10.3.3 描述方法...... 260
10.3.4 描述访问XML Web服务方法的通信协议...... 261
10.3.5 为方法访问设置站点...... 262
10.3.6 设置方法的类...... 262
10.4 XmlWebServiceMethodInvoker类...... 262
10.4.1 以编程方式下载WSDL文档...... 263
10.4.2 根据WSDL文档反序列化一个.NET对象...... 264
10.4.3 为代理类生成代码...... 265
10.4.4 Import方法背后的秘密...... 266
10.4.5 编译代理类代码...... 269
10.4.6 创建代理类实例...... 270
10.4.7 调用代理类实例中的特定方法...... 270
10.4.8 总结:The InvokeXmlWebServiceMethod方法...... 274
10.5 如何使用XmlWebServiceMethodInvoker.. 275
10.6 缓存编译后的代理类...... 277
10.6.1 缓存相关属性...... 278
10.6.2 CompileCodeForProxyClass方法...... 278
10.6.3 InvokeXmlWebServiceMethod方法...... 280
10.6.4 使用缓存功能...... 281
10.7 开发XML Web服务自定义控件...... 284
10.8 XmlWebServiceResolver组件...... 286
10.8.1 XMLResolver类...... 286
10.8.2 GetEntity方法...... 290
10.9 小结...... 294
第11章 实现架构导入扩展和ISerializable接口...... 295
11.1 实现IXmlSerializable接口...... 295
11.1.1 实现服务器端组件...... 296
11.1.2 开发客户端组件...... 301
11.2 开发自定义架构导入扩展...... 303
11.2.1 使用喜欢的语言编写代码...... 305
11.2.2 CodeDom方法...... 305
11.3 注册自定义架构导入扩展...... 319
11.4 以块化方式发送和接收数据...... 321
11.4.1 BookContent类...... 321
11.4.2 ForumBook类...... 324
11.4.3 自定义架构导入扩展...... 325
11.5 XmlWebServiceMethodInvoker的可扩展能力...... 326
11.6 小结...... 326
第12章 理解ASP.NET 2.0表格式数据源控件模型...... 327
12.1 为什么需要ASP.NET 2.0数据源控件模型...... 327
12.1.1 获取数据...... 329
12.1.2 Update事件...... 330
12.2 ASP.NET 2.0数据源控件模型...... 332
12.3 AS P.NET 2.0表格式数据源控件模型...... 333
12.3.1 IDataSource接口...... 333
12.3.2 DataSourceControl类背后的秘密...... 335
12.3.3 继承DataSourceControl基类...... 336
12.3.4 DataSourceView类...... 338
12.3.5 Delete方法...... 349
12.3.6 Update方法...... 353
12.3.7 Insert方法...... 357
12.3.8 状态管理...... 361
12.4 小结...... 362
第13章 ASP.NET 2.0数据源控件参数模型...... 363
13.1 Parameters类...... 363
13.2 Parameter类...... 366
13.2.1 OnParameterChanged方法...... 366
13.2.2 SaveCurrentValue方法...... 367
13.2.3 Evaluate方法...... 368
13.2.4 CookieParameter组件...... 368
13.2.5 ControlParameter组件...... 369
13.3 ParameterCollection类...... 371
13.3.1 ParametersChanged事件...... 371
13.3.2 OnInsert方法...... 372
13.3.3 GetValues方法...... 372
13.3.4 UpdateValues方法...... 374
13.4 自动调用GetValues和UpdateValues方法...... 374
13.4.1 ParameterCollection类型属性...... 374
13.4.2 OnInit和Page_LoadComplete方法...... 376
13.4.3 ExecuteSelect方法...... 377
13.4.4 ExecuteDelete方法...... 377
13.4.5 ExecuteUpdate方法...... 379
13.4.6 ExecuteInsert方法...... 381
13.5 综合应用...... 383
13.6 开发自定义参数...... 385
13.6.1 XmlWebServiceParameter组件...... 385
13.6.2 ObjectParameter组件...... 389
13.6.3 ClientParameter组件...... 392
13.7 小结...... 397
第14章 开发ASP.NET 2.0自定义表格式数据源控件...... 399
14.1 XmlWebServiceMethodInvoker组件...... 399
14.2 DataSourceControl类...... 401
14.3 DataSourceView类...... 402
14.3.1 ExecuteSelect方法...... 403
14.3.2 ExecuteUpdate方法...... 415
14.3.3 ExecuteInsert方法...... 421
14.3.4 ExecuteDelete方法...... 425
14.4 RetrieveMethodArgumentNamesAndValues方法...... 428
14.5 状态管理...... 430
14.6 小结...... 432
第15章 理解ASP.NET 2.0分层式数据源控件模型...... 433
15.1 IHierarchicalDataSource接口...... 434
15.2 HierarchicalDataSourceControl类...... 435
15.3 HierarchicalDataSourceView类...... 437
15.4 IHierarchyData接口...... 440
15.5 IHierarchicalEnumerable接口...... 441
15.5.1 XmlHierarchyData类...... 444
15.5.2 XmlHierarchicalEnumerable类...... 450
15.5.3 XmlHierarchyDataPropertyDescriptor类...... 451
15.5.4 ICustomTypeDescriptor接口...... 453
15.5.5 XmlHierarchicalDataSourceView.... 455
15.6 小结...... 456
第16章 开发ASP.NET 2.0自定义分层式数据源控件...... 457
16.1 CustomSqlDataSource控件...... 457
16.2 SqlHierarchyDataPropertyDescriptor类...... 463
16.3 SqlHierarchyData类...... 466
16.3.1 构造函数...... 466
16.3.2 实现HasChildren属性...... 467
16.3.3 实现Type属性...... 467
16.4 SqlHierarchicalEnumerable类...... 469
16.5 SqlHierarchicalDataSourceView类...... 471
16.6 小结...... 472
第17章 理解ASP.NET 2.0表格式数据绑定控件模型...... 473
17.1 本章概述...... 473
17.2 ASP.NET 1.x数据绑定控件模型...... 475
17.2.1 RetrieveData方法...... 475
17.2.2 重写DataBind方法...... 476
17.2.3 处理第3个数据绑定任务...... 476
17.3 BaseDataBoundControl类...... 477
17.3.1 自动调用DataBind方法...... 477
17.3.2 第一个和第二个数据绑定任务...... 478
17.3.3 第3个数据绑定任务...... 478
17.4 开发继承自BaseDataBoundControl的自定义数据绑定控件...... 480
17.4.1 处理Load事件...... 481
17.4.2 重写PerformSelect方法...... 481
17.4.3 以声明方式编程而不编写代码...... 483
17.4.4 CustomTable2控件的不足...... 484
17.5 DataBoundControl类...... 484
17.5.1 GetDataSource方法...... 485
17.5.2 GetData方法...... 486
17.5.3 重写BaseDataBoundControl的抽象方法...... 486
17.6 开发继承自DataBoundControl的自定义数据绑定控件...... 490
17.6.1 重写CreateDataSourceSelectArguments方法...... 490
17.6.2 重写PerformDataBinding方法...... 492
17.6.3 UpdateCallback方法...... 492
17.6.4 DeleteCallback方法...... 494
17.6.5 以声明方式实现针对未知数据的无代码编程...... 495
17.7 CompositeDataBoundControl类...... 496
17.7.1 重写PerformDataBinding方法...... 497
17.7.2 重写DataBind方法...... 498
17.7.3 重写CreateChildControls方法...... 498
17.7.4 重写Controls集合...... 499
17.8 开发继承自CompositeDataBoundControl的控件...... 499
17.8.1 MasterDetailForm控件...... 500
17.8.2 AddDetailRow方法...... 505
17.8.3 AddMasterCell方法...... 507
17.8.4 AddMasterHeaderCell方法...... 508
17.8.5 AddMasterSelectButton方法...... 508
17.8.6 AddDetailCommandBar方法...... 509
17.8.7 Delete数据操作...... 511
17.8.8 Update数据操作...... 512
17.8.9 Sort操作...... 513
17.8.10 控件状态...... 514
17.8.11 外观属性...... 516
17.8.12 无需编程实现主/从表...... 516
17.9 小结...... 518
第18章 ASP.NET 2.0数据控件字段模型...... 519
18.1 为什么需要ASP.NET 2.0数据控件字段模型...... 519
18.2 DataControlField组件...... 521
18.2.1 OnFieldChanged方法...... 523
18.2.2 Initialize方法...... 524
18.2.3 InitializeCell方法...... 524
18.2.4 ExtractValuesFromCell方法...... 525
18.3 BoundField... 526
18.3.1 InitializeCell方法...... 526
18.3.2 InitializeDataCell方法...... 527
18.3.3 OnDataBindField方法...... 527
18.3.4 GetValue方法...... 528
18.3.5 ExtractValuesFromCell方法...... 530
18.4 DataControlFieldCollection组件...... 531
18.4.1 FieldsChanged事件...... 531
18.4.2 OnInsert方法...... 532
18.5 开发自定义数据控件字段...... 532
18.5.1 DropDownListField... 533
18.5.2 CalendarField... 541
18.6 小结...... 546
第19章 开发ASP.NET 2.0自定义表格式数据绑定控件...... 547
19.1 继承自CompositeDataBoundControl. 548
19.2 重写CreateChildControls方法...... 548
19.2.1 初始化参数...... 550
19.2.2 描述主键字段...... 551
19.2.3 创建Table子控件...... 552
19.2.4 创建PagedDataSource对象...... 553
19.2.5 创建数据控件字段...... 554
19.2.6 创建顶部分页行...... 559
19.2.7 创建标题行...... 562
19.2.8 枚举数据记录...... 563
19.2.9 创建空数据行...... 565
19.2.10 创建和填充GridViewRowCollection... 566
19.2.11 CreateRow方法...... 567
19.2.12 InitializeRow方法...... 567
19.3 重写CreateDataSourceSelectArguments方法...... 568
19.4 重写CreateControlStyle方法...... 570
19.5 重写OnBubbleEvent方法...... 570
19.6 重写Render方法...... 578
19.7 状态管理...... 582
19.8 重写OnInit方法...... 584
19.9 事件...... 584
19.10 GridViewRow类...... 587
19.11 GridViewRowCollection类...... 591
19.12 小结...... 591
第20章 为什么需要ASP.NET 2.0成员资格/角色模型...... 593
20.1 ASP.NET 1.x安全模型...... 593
20.2 授权机制...... 599
20.3 ASP.NET 1.x安全模型的缺点...... 600
20.4 .NET 2.0提供程序模式...... 601
20.5 小结...... 602
第21章 理解ASP.NET 2.0成员资格模型...... 603
21.1 Membership类...... 603
21.1.1 成员资格提供程序的初始化和实例化...... 603
21.1.2 <membership>节...... 604
21.1.3 Provider和Providers属性...... 605
21.2 成员资格API.. 609
21.2.1 将新用户添加到数据存储中...... 609
21.2.2 从数据存储中删除用户...... 610
21.2.3 在数据存储中更新指定用户成员资格信息...... 611
21.2.4 根据数据存储验证用户凭证...... 611
21.2.5 在数据存储中查找用户...... 611
21.2.6 从数据存储中获取用户成员资格信息...... 613
21.2.7 强制设置应用程序特定的密码验证规则...... 614
21.2.8 访问用户在线时间窗口...... 616
21.3 开发自定义安全控件...... 617
21.3.1 Login控件...... 617
21.3.2 Register控件...... 622
21.3.3 使用Login和Register控件...... 624
21.3.4 注册SqlMembershipProvider.. 626
21.4 MembershipUser类...... 627
21.4.1 访问成员资格提供程序...... 629
21.4.2 重置并获取密码...... 629
21.4.3 修改密码...... 630
21.4.4 修改密码问题和答案...... 631
21.4.5 用户解锁...... 631
21.5 小结...... 632
第22章 开发自定义MembershipProvider和MembershipUser组件...... 633
22.1 MembershipProvider类...... 633
22.2 SqlMembershipProvider类...... 635
22.3 ProviderBase基类...... 635
22.4 MembershipProvider类...... 641
22.4.1 ChangePassword方法...... 642
22.4.2 ValidateUserInfo方法...... 644
22.4.3 UpdateUserInfo方法...... 648
22.4.4 Update方法...... 649
22.4.5 ChangePasswordQuestionAndAnswer方法...... 650
22.4.6 CreateUser方法...... 651
22.4.7 DeleteUser方法...... 656
22.4.8 FindUsersByEmail方法...... 657
22.4.9 FindUsersByName方法...... 658
22.4.10 GetAllUsers方法...... 660
22.4.11 Select方法...... 661
22.4.12 GetNumberOfUsersOnline方法...... 662
22.4.13 GetPassword方法...... 662
22.4.14 GetUser方法...... 665
22.4.15 GetUserNameByEmail方法...... 668
22.4.16 ResetPassword方法...... 668
22.4.17 UnlockUser方法...... 671
22.4.18 UpdateUser方法...... 672
22.4.19 ValidateUser方法...... 672
22.5 注册SqlMembershipProvider.. 673
22.6 使用自定义成员资格提供程序...... 674
22.7 扩展ASP.NET 2.0成员资格API.. 675
22.7.1 CustomMembershipUser类...... 676
22.7.2 CustomMembershipProvider类...... 677
22.7.3 CustomSqlMembershipProvider类...... 678
22.7.4 使用CustomMembershipUser、CustomMembershipProvider和 CustomSqlMembershipProvider.. 684
22.8 小结...... 686
第23章 理解ASP.NET角色管理模型...... 687
23.1 角色管理API.. 687
23.1.1 管理角色...... 688
23.1.2 管理用户...... 689
23.2 RolePrincipal类...... 691
23.2.1 身份...... 691
23.2.2 角色成员...... 692
23.2.3 IPrincipal接口...... 692
23.3 RoleManagerModule类...... 697
23.3.1 PostAuthenticateRequestCallback方法...... 698
23.3.2 GetRoles事件...... 699
23.3.3 EndRequestCallback方法...... 701
23.4 小结...... 702
第24章 开发自定义角色提供程序、模块和主体...... 703
24.1 RoleProvider基类...... 703
24.2 XmlRoleProvider.. 704
24.3 ProviderBase类...... 705
24.4 XML API.. 706
24.4.1 流XML API.. 707
24.4.2 随机访问XML API.. 711
24.5 实现RoleProvider类的方法...... 713
24.5.1 LoadData方法...... 714
24.5.2 SaveData方法...... 714
24.5.3 角色管理...... 715
24.5.4 用户管理...... 727
24.6 开发自定义角色主体...... 739
24.6.1 构造函数...... 740
24.6.2 GetRoles方法...... 742
24.6.3 实现IPrincipal接口...... 743
24.7 开发自定义角色管理模块...... 744
24.7.1 PostAuthenticateRequestCallback方法...... 745
24.7.2 GetRoles事件...... 747
24.7.3 EndRequestCallback方法...... 748
24.7.4 XmlRoleProvider和CacheDependency... 750
24.8 使用XmlRoleProvider.. 751
24.9 小结...... 756
第25章 开发基于提供程序的自定义服务...... 757
25.1 开发基于提供程序的自定义服务的方法...... 757
25.2 基于提供程序的RSS服务...... 758
25.3 自定义提供程序基类...... 759
25.4 自定义提供程序集合...... 760
25.5 配置Web.config和Machine.config文件...... 760
25.5.1 自定义配置节...... 761
25.5.2 注册<rssService>节...... 762
25.6 实现Service类...... 763
25.7 使用RSS服务...... 765
25.8 SqlRssProvider类...... 766
25.8.1 Initialize方法...... 766
25.8.2 LoadRss方法...... 772
25.8.3 GetDataReader方法...... 774
25.8.4 注册SqlRssProvider.. 774
25.9 RssHelper类...... 775
25.10 XmlRssProvider类...... 777
25.10.1 Initialize方法...... 778
25.10.2 LoadRss方法...... 781
25.10.3 RetrieveData方法...... 783
25.10.4 注册XmlRssProvider.. 784
25.11 小结...... 785
第26章 开发Ajax控件和组件:客户端功能...... 787
26.1 Ajax组件和控件...... 787
26.2 Ajax控件客户端功能的实现方法...... 789
26.3 呈现方式...... 790
26.3.1 将脚本呈现为HTML属性值...... 790
26.3.2 将客户端脚本呈现为脚本块...... 792
26.3.3 客户端脚本库...... 799
26.4 部署...... 802
26.4.1 将源文件部署到一个共享位置...... 803
26.4.2 将源文件嵌入程序集...... 803
26.5 呈现控件的客户端脚本的时机...... 811
26.5.1 禁用控件的客户端功能...... 811
26.5.2 检查请求浏览器的Ajax功能...... 812
26.6 呈现控件的客户端脚本的位置...... 813
26.6.1 重写OnPreRender方法...... 814
26.6.2 重写AddAttributesToRender方法...... 814
26.6.3 重写RenderContents方法...... 814
26.6.4 重写Render方法...... 815
26.7 退回到服务器端代码...... 815
26.8 开发Ajax控件...... 816
26.8.1 Ajax控件CustomImage.. 817
26.8.2 Ajax复合控件ImageDialog... 825
26.9 小结...... 840
第27章 开发Ajax控件和组件:异步客户端回调...... 841
27.1 为什么使用AjaxDropDownList控件...... 842
27.2 客户端回调机制...... 843
27.3 实现ASP.NET 2.0客户端回调机制...... 843
27.3.1 重写OnPreRender方法...... 844
27.3.2 重写Render方法...... 851
27.3.3 服务器端...... 852
27.4 ASP.NET 2.0客户端回调机制...... 853
27.4.1 重写OnPreRender方法...... 854
27.4.2 重写Render方法...... 856
27.4.3 服务器端...... 857
27.5 未知类型数据存储Ajax控件...... 858
27.6 主/次窗体...... 862
27.7 开发Ajax数据控件字段...... 863
27.8 AjaxDetailsDialog控件...... 866
27.8.1 将AjaxDetailsDialog实现为复合控件...... 869
27.8.2 将AjaxDetailsDialog实现为Ajax控件...... 872
27.9 AjaxField数据控件字段...... 879
27.9.1 重写InitializeCell方法...... 879
27.9.2 重写OnDataBindField方法...... 882
27.9.3 实现CreateField方法...... 884
27.9.4 重写ExtractValuesFromCell方法...... 884
27.10 DropDownListField2控件...... 885
27.10.1 重写InitializeCell方法...... 885
27.10.2 重写CreateField方法...... 888
27.10.3 重写ExtractValuesFromCell方法...... 888
27.11 Ajax控件CustomGridView.... 888
27.11.1 重写CreateChildTable方法...... 888
27.11.2 重写PrepareControlHierarchy方法...... 891
27.12 小结...... 897
第28章 开发Ajax控件和组件:Ajax模式...... 899
28.1 模式...... 899
28.2 Google的XML Web服务API.. 900
28.3 预测式获取(Predictive Fetch)模式...... 908
28.3.1 继承自WebControl基类...... 910
28.3.2 实现ICallbackEventHandler接口...... 927
28.4 小结...... 930
第29章 开发Ajax控件和组件:更多的Ajax模式...... 931
29.1 周期式刷新(Periodic Refresh)模式...... 931
29.1.1 继承自WebControl基类...... 932
29.1.2 实现ICallbackEventHandler接口...... 934
29.2 提交节流(Submission Throttling)模式...... 941
29.2.1 重写OnPreRender方法...... 942
29.2.2 重写Render方法...... 944
29.2.3 JavaScript函数...... 954
29.3 显式提交(Explicit Submission)模式...... 961
29.3.1 重写OnPreRender方法...... 961
29.3.2 重写Render方法...... 963
29.3.3 实现ICallbackEventHandler接口...... 965
29.3.4 JavaScript函数...... 966
29.4 小结...... 967
第30章 理解ASP.NET 2.0 Web部件框架...... 969
30.1 什么是ASP.NET Web部件框架...... 969
30.2 以声明方式开发WebPart控件...... 971
30.3 移动WebPart控件...... 975
30.4 个性化WebPart控件的属性...... 979
30.5 个性化WebPart控件的自定义属性...... 982
30.6 添加已声明的WebPart控件...... 984
30.7 添加已关闭的WebPart控件...... 986
30.8 导出WebPart控件...... 988
30.9 添加导入的WebPart控件...... 991
30.10 Web部件框架的主要组件...... 993
30.11 Part基类...... 994
30.12 小结...... 996
第31章 开发自定义WebPart、EditorPart和CatalogPart控件...... 997
31.1 WebPart基类...... 997
31.2 开发自定义WebPart控件...... 1001
31.2.1 CreateChildControls方法...... 1002
31.2.2 AddContainer方法...... 1004
31.2.3 AddItemToContainer方法...... 1004
31.2.4 使用RssReaderWebPart控件...... 1005
31.3 实现IWebPart接口...... 1006
31.4 IWebActionable接口...... 1006
31.4.1 开发自定义Web部件谓词...... 1008
31.4.2 开发支持自定义Web部件谓词的WebPart控件...... 1009
31.5 EditorPart基类...... 1014
31.6 开发自定义EditorPart控件...... 1015
31.6.1 将RssReaderEditorPart作为复合控件...... 1016
31.6.2 SyncChanges方法...... 1021
31.6.3 ApplyChanges方法...... 1022
31.6.4 OnLoad方法...... 1024
31.6.5 RssReaderWebPart4控件...... 1024
31.7 CatalogPart基类...... 1034
31.8 开发自定义CatalogPart控件...... 1038
31.8.1 GetAvailableWebPartDescriptions方法...... 1040
31.8.2 LoadWebPartInfoSet方法...... 1044
31.8.3 GetWebPart方法...... 1045
31.8.4 LoadWebPartDescriptionFile方法...... 1046
31.8.5 使用XmlWebServiceCatalogPart控件...... 1046
31.9 小结...... 1052
第32章 开发自定义WebPartZoneBase控件...... 1053
32.1 WebZone基类...... 1053
32.2 WebPartZoneBase基类...... 1056
32.2.1 继承自WebZone基类...... 1057
32.2.2 CreateWebPartChrome方法...... 1059
32.2.3 CreateInitialWebParts方法...... 1059
32.2.4 CreateVerbs事件...... 1059
32.2.5 实现IPostBackEventHandler接口...... 1060
32.3 WebPartZone类...... 1063
32.4 开发自定义WebPartZone控件...... 1065
32.4.1 XmlWebServiceWebPartZone类...... 1065
32.4.2 ProviderBasedWebPartZone类...... 1071
32.4.3 SqlDescriptionDocumentProvider类...... 1085
32.5 WebPartChrome类...... 1088
32.5.1 RenderWebPart方法...... 1089
32.5.2 PerformPreRender方法...... 1093
32.6 开发自定义WebPartChrome.. 1094
32.6.1 CustomWebPartZone类...... 1097
32.6.2 使用CustomWebPartChrome控件...... 1097
32.7 小结...... 1098
第33章 WebPartManager、Web部件连接和数据绑定WebPart控件...... 1099
33.1 开发自定义WebPartManager控件...... 1099
33.2 连接WebPart控件...... 1103
33.2.1 实现提供者和订阅者WebPart控件...... 1112
33.2.2 动态连接...... 1118
33.2.3 以编程方式实现连接...... 1123
33.3 开发数据绑定WebPart控件...... 1132
33.3.1 BaseDataBoundWebPart基类...... 1133
33.3.2 DataBoundWebPart基类...... 1135
33.3.3 CompositeDataBoundWebPart基类...... 1137
33.3.4 GridViewWebPart控件...... 1138
33.3.5 MasterDetailGridViewWebPart控件...... 1140
33.4 小结...... 1145