第1章 ASP.NET2.0框架 1
1.1 请求过程 1
1.2 为什么开发自定义组件 4
1.2.2 角色管理模块和主体 5
1.2.1 数据源控件 5
1.2.5 自定义XML Web服务和客户端 6
1.2.4 成员资格提供程序 6
1.2.3 角色提供程序 6
1.2.8 开发自定义数据字段 7
1.2.7 开发Web部件控件 7
1.2.6 开发Ajax控件和组件 7
1.3 小结 8
1.2.10 开发自定义的基于提供程序的服务 8
1.2.9 开发自定义HTTP处理程序和模块 8
2.1 隐藏信息 9
第2章 开发简单的自定义控件和用户控件 9
2.2 部署自定义控件 14
2.3 在Web页面中使用自定义控件 15
2.4 为自定义控件添加属性 16
2.5.1 属性(Property)层次属性(Attribute) 19
2.5 为自定义控件添加设计时属性 19
2.5.2 类层次属性(Attribute) 20
2.6 将自定义控件添加到Visual Studio工具箱 21
2.5.3 程序集层次属性(Attribute) 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.1 Style类 39
第3章 开发自定义控件样式 39
3.2 WebControl类 40
3.2.3 RenderBeginTag方法 45
3.2.2 TagKey属性 45
3.2.1 重写Render方法 45
3.2.4 AddAttributesToRender方法 46
3.2.6 RenderEndTag方法 50
3.2.5 RenderContents方法 50
3.3 继承WebControl类 51
3.4 开发自定义Style类 56
3.5 使用自定义Style类 60
3.6 小结 62
4.1 事件介绍 63
第4章 开发自定义控件事件 63
4.2.1 事件数据和事件委托类 64
4.2 .NET事件设计模式 64
4.2.2 引发自定义控件事件 66
4.3 事件优化 68
4.4 回传 70
4.4.1 C#接口实现模式 73
4.4.3 回传数据 74
4.4.2 回传事件 74
4.5 页面生命周期 84
4.6 小结 87
5.1.1 呈现HTML 89
5.1 再次修改CreditCardForm6 89
第5章 开发自定义复合控件 89
5.1.2 回传功能 94
5.2 创建复合控件 96
5.2.3 选定布局 97
5.2.2 选定子控件 97
5.2.1 继承CompositeControl类 97
5.2.4 实现自定义容器控件 98
5.2.5 创建容器控件 99
5.2.6 创建容器控件的子控件 100
5.2.7 为容器控件应用样式 103
5.2.9 呈现容器控件 104
5.2.8 将容器控件添加到复合控件 104
5.2.10 CreateChildControls方法:一站式构建子控件 105
5.2.12 CreateControlStyle方法 107
5.2.11 TagKey属性 107
5.2.14 RenderContents方法 108
5.2.13 公开样式属性 108
5.2.15 Label属性 110
5.2.16 事件冒泡 112
5.2.18 重写Controls集合 116
5.2.17 自定义控件从CompositeControl继承了什么 116
5.2.19 INamingContainer接口 117
5.3 小结 118
6.1 自定义容器控件内容 119
第6章 开发自定义模板控件 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.1 容器控件的样式属性 145
第7章 开发包含复杂属性的自定义控件 145
7.2 自定义容器控件外观 146
7.3 状态管理 148
7.4 实现IStateManager接口的类型 150
7.4.1 DefaultTemplateManager类 151
7.4.2 TemplatedCreditCardForm3 156
7.5.1 TypeConverter类 162
7.5 不实现IStateManager接口的类型 162
7.5.2 DefaultTemplateManager2类 163
7.5.3 DefaultTemplateManager2Converter类 164
7.5.5 使用不实现IStateManager接口的类 167
7.5.4 使用转换器标记DefaultTemplateManager2类 167
7.5.6 为什么需要使用TypeDescriptor 170
7.6.1 声明属性 171
7.6 容器控件样式的状态管理 171
7.6.2 TrackViewState方法 173
7.6.3 SaveViewState方法 174
7.6.4 LoadViewState方法 175
7.7.1 简单属性 176
7.7 声明持久性 176
7.7.2 复杂属性(连字符声明持久性) 177
7.7.3 复杂属性(内部属性声明持久性) 179
7.8 小结 181
8.1 请求过程 183
第8章 ASP.NET请求处理框架 183
8.2 HTTP模块 186
8.3 HTTP处理程序 187
8.5 控件生成器 188
8.4 HTTP处理程序工厂 188
8.6 开发自定义HTTP模块 195
8.8 开发自定义HTTP处理程序工厂 198
8.7 注册自定义HTTP模块 198
8.9.1 RSS 200
8.9 开发自定义HTTP处理程序 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.1 CustomTable控件 217
第9章 数据绑定 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.1 TrackViewState方法 244
9.13 状态管理 244
9.13.2 SaveViewState方法 245
9.13.3 LoadViewState方法 246
9.14 在页面中使用CustomTable控件 248
9.16 小结 249
9.15 CustomTable控件的缺点 249
10.1 开发和使用XML Web服务 251
第10章 XML Web服务 251
10.2 添加引用按钮背后的秘密 254
10.3 WSDL文档 257
10.3.2 返回值的类型和顺序 259
10.3.1 参数的名称、类型和顺序 259
10.3.3 描述方法 260
10.3.4 描述访问XML Web服务方法的通信协议 261
10.4 XmlWebServiceMethodInvoker类 262
10.3.6 设置方法的类 262
10.3.5 为方法访问设置站点 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.7 调用代理类实例中的特定方法 270
10.4.6 创建代理类实例 270
10.4.8 总结:The InvokeXmlWebServiceMethod方法 274
10.5 如何使用XmlWebServiceMethodInvoker 275
10.6 缓存编译后的代理类 277
10.6.2 CompileCodeForProxyClass方法 278
10.6.1 缓存相关属性 278
10.6.3 InvokeXmlWebServiceMethod方法 280
10.6.4 使用缓存功能 281
10.7 开发XML Web服务自定义控件 284
10.8.1 XMLResolver类 286
10.8 XmlWebServiceResolver组件 286
10.8.2 GetEntity方法 290
10.9 小结 294
11.1 实现IXmlSerializable接口 295
第11章 实现架构导入扩展和ISerializable接口 295
11.1.1 实现服务器端组件 296
11.1.2 开发客户端组件 301
11.2 开发自定义架构导入扩展 303
11.2.2 CodeDom方法 305
11.2.1 使用喜欢的语言编写代码 305
11.3 注册自定义架构导入扩展 319
11.4.1 BookContent类 321
11.4 以块化方式发送和接收数据 321
11.4.2 ForumBook类 324
11.4.3 自定义架构导入扩展 325
11.6 小结 326
11.5 XmlWebServiceMethodInvoker的可扩展能力 326
12.1 为什么需要ASP.NET 2.0数据源控件模型 327
第12章 理解ASP.NET 2.0表格式数据源控件模型 327
12.1.1 获取数据 329
12.1.2 Update事件 330
12.2 ASP.NET 2.0数据源控件模型 332
12.3.1 IDataSource接口 333
12.3 ASP.NET 2.0表格式数据源控件模型 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.1 Parameters类 363
第13章 ASP.NET 2.0数据源控件参数模型 363
13.2.1 OnParameterChanged方法 366
13.2 Parameter类 366
13.2.2 SaveCurrentValue方法 367
13.2.4 CookieParameter组件 368
13.2.3 Evaluate方法 368
13.2.5 ControlParameter组件 369
13.3.1 ParametersChanged事件 371
13.3 ParameterCollection类 371
13.3.3 GetValues方法 372
13.3.2 OnInsert方法 372
13.4.1 ParameterCollection类型属性 374
13.4 自动调用GetValues和UpdateValues方法 374
13.3.4 UpdateValues方法 374
13.4.2 OnInit和Page_LoadComplete方法 376
13.4.4 ExecuteDelete方法 377
13.4.3 ExecuteSelect方法 377
13.4.5 ExecuteUpdate方法 379
13.4.6 ExecuteInsert方法 381
13.5 综合应用 383
13.6.1 XmlWebServiceParameter组件 385
13.6 开发自定义参数 385
13.6.2 ObjectParameter组件 389
13.6.3 ClientParameter组件 392
13.7 小结 397
14.1 XmlWebServiceMethodInvoker组件 399
第14章 开发ASP.NET 2.0自定义表格式数据源控件 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.1 CustomSqlDataSource控件 457
第16章 开发ASP.NET 2.0自定义分层式数据源控件 457
16.2 SqlHierarchyDataPropertyDescriptor类 463
16.3.1 构造函数 466
16.3 SqlHierarchyData类 466
16.3.3 实现Type属性 467
16.3.2 实现HasChildren属性 467
16.4 SqlHierarchicalEnumerable类 469
16.5 SqlHierarchicalDataSourceView类 471
16.6 小结 472
17.1 本章概述 473
第17章 理解ASP.NET 2.0表格式数据绑定控件模型 473
17.2.1 RetrieveData方法 475
17.2 ASP.NET 1.x数据绑定控件模型 475
17.2.3 处理第3个数据绑定任务 476
17.2.2 重写DataBind方法 476
17.3.1 自动调用DataBind方法 477
17.3 BaseDataBoundControl类 477
17.3.3 第3个数据绑定任务 478
17.3.2 第一个和第二个数据绑定任务 478
17.4 开发继承自BaseDataBoundControl的自定义数据绑定控件 480
17.4.2 重写PerformSelect方法 481
17.4.1 处理Load事件 481
17.4.3 以声明方式编程而不编写代码 483
17.5 DataBoundControl类 484
17.4.4 CustomTable2控件的不足 484
17.5.1 GetDataSource方法 485
17.5.3 重写BaseDataBoundControl的抽象方法 486
17.5.2 GetData方法 486
17.6.1 重写CreateDataSourceSelectArguments方法 490
17.6 开发继承自DataBoundControl的自定义数据绑定控件 490
17.6.3 UpdateCallback方法 492
17.6.2 重写PerformDataBinding方法 492
17.6.4 DeleteCallback方法 494
17.6.5 以声明方式实现针对未知数据的无代码编程 495
17.7 CompositeDataBoundControl类 496
17.7.1 重写PerformDataBinding方法 497
17.7.3 重写CreateChildControls方法 498
17.7.2 重写DataBind方法 498
17.8 开发继承自CompositeDataBoundControl的控件 499
17.7.4 重写Controls集合 499
17.8.1 MasterDetailForm控件 500
17.8.2 AddDetailRow方法 505
17.8.3 AddMasterCell方法 507
17.8.5 AddMasterSelectButton方法 508
17.8.4 AddMasterHeaderCell方法 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.12 无需编程实现主/从表 516
17.8.11 外观属性 516
17.9 小结 518
18.1 为什么需要ASP.NET 2.0数据控件字段模型 519
第18章 ASP.NET 2.0数据控件字段模型 519
18.2 DataControlField组件 521
18.2.1 OnFieldChanged方法 523
18.2.3 InitializeCell方法 524
18.2.2 Initialize方法 524
18.2.4 ExtractValuesFromCell方法 525
18.3.1 InitializeCell方法 526
18.3 BoundField 526
18.3.3 OnDataBindField方法 527
18.3.2 InitializeDataCell方法 527
18.3.4 GetValue方法 528
18.3.5 ExtractValuesFromCell方法 530
18.4.1 FieldsChanged事件 531
18.4 DataControlFieldCollection组件 531
18.5 开发自定义数据控件字段 532
18.4.2 OnInsert方法 532
18.5.1 DropDownListField 533
18.5.2 CalendarField 541
18.6 小结 546
第19章 开发ASP.NET 2.0自定义表格式数据绑定控件 547
19.2 重写CreateChildControls方法 548
19.1 继承自CompositeDataBoundControl 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.12 InitializeRow方法 567
19.2.11 CreateRow方法 567
19.3 重写CreateDataSourceSelectArguments方法 568
19.5 重写OnBubbleEvent方法 570
19.4 重写CreateControlStyle方法 570
19.6 重写Render方法 578
19.7 状态管理 582
19.9 事件 584
19.8 重写OnInit方法 584
19.10 GridViewRow类 587
19.12 小结 591
19.11 GridViewRowCollection类 591
20.1 ASP.NET 1.x安全模型 593
第20章 为什么需要ASP.NET 2.0成员资格/角色模型 593
20.2 授权机制 599
20.3 ASP.NET 1.x安全模型的缺点 600
20.4 .NET 2.0提供程序模式 601
20.5 小结 602
21.1.1 成员资格提供程序的初始化和实例化 603
21.1 Membership类 603
第21章 理解ASP.NET 2.0成员资格模型 603
21.1.2 〈membership〉节 604
21.1.3 Provider和Providers属性 605
21.2.1 将新用户添加到数据存储中 609
21.2 成员资格API 609
21.2.2 从数据存储中删除用户 610
21.2.5 在数据存储中查找用户 611
21.2.4 根据数据存储验证用户凭证 611
21.2.3 在数据存储中更新指定用户成员资格信息 611
21.2.6 从数据存储中获取用户成员资格信息 613
21.2.7 强制设置应用程序特定的密码验证规则 614
21.2.8 访问用户在线时间窗口 616
21.3.1 Login控件 617
21.3 开发自定义安全控件 617
21.3.2 Register控件 622
21.3.3 使用Login和Register控件 624
21.3.4 注册SqlMembershipProvider 626
21.4 MembershipUser类 627
21.4.2 重置并获取密码 629
21.4.1 访问成员资格提供程序 629
21.4.3 修改密码 630
21.4.5 用户解锁 631
21.4.4 修改密码问题和答案 631
21.5 小结 632
22.1 MembershipProvider类 633
第22章 开发自定义MembershipProvider和MembershipUser组件 633
22.3 ProviderBase基类 635
22.2 SqlMembershipProvider类 635
22.4 MembershipProvider类 641
22.4.1 ChangePassword方法 642
22.4.2 ValidateUserInfo方法 644
22.4.3 UpdateUserInfo方法 648
22.4.4 UDdate方法 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.13 GetPassword方法 662
22.4.12 GetNumberOfUsersOnline方法 662
22.4.14 GetUser方法 665
22.4.16 ResetPassword方法 668
22.4.15 GetUserNameByEmail方法 668
22.4.17 UnlockUser方法 671
22.4.19 ValidateUser方法 672
22.4.18 UpdateUser方法 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.1 角色管理API 687
第23章 理解ASP.NET角色管理模型 687
23.1.1 管理角色 688
23.1.2 管理用户 689
23.2.1 身份 691
23.2 RolePrincipal类 691
23.2.3 IPrincipal接口 692
23.2.2 角色成员 692
23.3 RoleManagerModule类 697
23.3.1 PostAuthenticateRequestCallback方法 698
23.3.2 GetRoles事件 699
23.3.3 EndRequestCallback方法 701
23.4 小结 702
24.1 RoleProvider基类 703
第24章 开发自定义角色提供程序、模块和主体 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.2 SaveData方法 714
24.5.1 LoadData方法 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.1 开发基于提供程序的自定义服务的方法 757
第25章 开发基于提供程序的自定义服务 757
25.2 基于提供程序的RSS服务 758
25.3 自定义提供程序基类 759
25.5 配置Web.config和Machine.config文件 760
25.4 自定义提供程序集合 760
25.5.1 自定义配置节 761
25.5.2 注册〈rssService〉节 762
25.6 实现Service类 763
25.7 使用RSS服务 765
25.8.1 Initialize方法 766
25.8 SqlRssProvider类 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.1 将脚本呈现为HTML属性值 790
26.3 呈现方式 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.2 重写AddAttributesToRender方法 814
26.6.3 重写RenderContents方法 814
26.6.1 重写OnPreRender方法 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 AiaxDetailsDialog控件 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.11 Ajax控件CustomGridView 888
27.10.3 重写ExtractValuesFromCell方法 888
27.11.1 重写CreateChildTable方法 888
27.10.2 重写CreateField方法 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.3 CreateInitialWebParts方法 1059
32.2.4 CreateVerbs事件 1059
32.2.2 CreateWebPartChrome方法 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