要感谢的人太多,不能一一列举。再次谢谢大家支持!
在这本书的完成过程中,我们一直在和时间赛跑,才得以勉力在这么短的时间里把书弄出来。
虽然我们追求在速度和质量这间求得一个平衡,但毕竟时间太短,所以质量上定有不如人意之处,欢迎大家理性批评指正,并宽容包涵。
昨天收到博文视点编辑寄来的样书,第一句要说的就是博文视点的工作人员辛苦了,8月初交完稿,9月底就完成了出版流程,只差一步就能面市。
收到书后,对印刷质量我很满意,版式也非常不错,当然受时间所限,也有一些小的瑕疵:个人觉得,封底很有节奏,封面则塞得太满,太抢了点,反而没有重点了,我想如果把门神图形淡化到40%或低点,不和书题冲突可能感觉好些,下面的红色条也可以淡点。此外,两页彩插同样的觉得太满了,多留些边距可能内容显得更内聚一些,全黄底和全书风格也有点相挤兑的感觉。
全书600多页,书的最后定价是69.8元(本来出版社认为这本书有彩插光盘等,可以定为89,我坚持买70元以下大家更易于接受点,最后还是听取了我的意见,这里要感谢出版社对我的信任),在网上购买打完折50块,不算特别贵。:)
关于面市时间,按原计划是在10.1前面市,最终因图书审批等过程略有耽搁,所以要推迟到10.1节后。
目 录
第1章 理解ASP.NET编程模型 1
1.1 ASP.NET运行时模型 2
1.2 HttpModule应用举例 4
1.2.1 二级域名Cookie处理 5
1.2.2 RegexUrlMapping 7
1.3 HttpHandler应用举例 12
1.4 HttpHandlerFactory应用举例 15
1.5 页面编程模型 17
1.6 页面编程模型应用举例 20
1.6.1 生成静态缓存页面 20
1.6.2 控制页面状态存取 23
1.7 本章小结 28
第2章 呈现内容 29
2.1 选择基类 29
2.2 System.Web.UI.Control.Render()方法 30
2.2.1 HelloWorld 31
2.2.2 相册 33
2.2.3 Render()是怎样被调用的 34
2.3 HtmlTextWriter的两个拍档 35
2.4 WebControl的呈现过程 38
2.4.1 继承WebControl的“相册”控件 40
2.5 CompositeControl的呈现过程 42
2.5.1 EmailInput控件 42
2.5.2 组合控件如何呈现子控件 44
2.6 装饰Attribute 47
2.7 本章小结 49
第3章 属性 50
3.1 公开控件属性 51
3.2 属性的持久化 54
3.2.1 视图状态 54
3.2.2 控件状态 55
3.2.3 应用视图状态 55
3.2.4 应用控件状态 57
3.3 属性在页面源码中的表达方式 58
3.3.1 属性在源代码中的各种表现形式 58
3.3.2 处理标签间的内容 60
3.3.3 源代码视图控件 65
3.4 IStateManager与复杂属性的状态持久 69
3.4.1 IStateManager 70
3.4.2 处理集合属性 72
3.4.3 表示复杂属性和隐藏属性 74
3.5 处理子控件 76
3.5.1 Control.AddParsedSubObject()方法 76
3.5.2 ControlBuilder 78
3.6 属性细节 80
3.7 本章小结 83
第4章 事件与回传 84
4.1 事件与委托 84
4.2 ASP.NET中的回传框架 85
4.3 数据回传 87
4.3.1 AutoFlexTextArea控件 87
4.4 回传事件 98
4.4.1 回传事件原理 98
4.4.2 IPostBackEventHandler接口 100
4.5 组合控件事件冒泡 108
4.5.1 OnBubbleEvent方法和RaiseBubble
4.5.1 Event方法 110
4.6 事件验证 112
4.7 本章小结 112
阶段项目A CompositeNumericUpDown 113
A.1 从CompositeControl开始 114
A.2 丰富控件样式 117
A.2.1 PositionStyle 118
A.2.2 应用PositionStyle 127
A.3 维护视图状态 131
A.4 回传数据与回传事件 133
A.4.1 回传数据 133
A.4.2 回传事件 134
A.4.3 事件冒泡 135
A.5 项目小结 145
第5章 脚本与资源集成 146
5.1 ClientScriptManager与HttpBrowser
5.1 Capabilities 147
5.1.1 ClientScriptManager概述 147
5.1.2 用HttpBrowserCapabilities类检验浏览器 148
5.1.3 Response.Write 150
5.2 呈现脚本 154
5.3 集成资源文件 161
5.3.1 外部JS文件与部署 161
5.3.2 JQuery简介 163
5.3.3 TabbableTextArea 164
5.4 AJAX与回调 167
5.4.1 ICallbackEventHandler 168
5.4.2 选项卡控件 169
5.5 本章小结 180
第6章 设计时支持 181
6.1 设计时功能综述 181
6.2 设计器 183
6.2.1 设计时呈现 185
6.2.2 自动格式设置 187
6.2.3 智能任务列表 190
6.2.4 设计器区域 194
6.2.5 支持模板 200
6.3 类型编辑器 204
6.3.1 UITypeEditor概述 204
6.3.2 RotateImage 206
6.4 TypeConverter 213
6.4.1 TypeConverter概述 214
6.4.2 支持标准值 215
6.5 本章小结 218
阶段项目B DateChooser 219
B.1 功能介绍 221
B.1.1 运行时功能 221
B.1.2 设计时功能 223
B.2 项目设计 225
B.2.1 项目分解 225
B.2.2 客户端设计 225
B.2.4 服务端设计 227
B.3 实现控件 227
B.3.1 实现客户端行为 227
B.3.2 控件呈现 232
B.3.3 设计时支持 237
B.4 项目小结 242
第7章 验证控件 244
7.1 ASP.NET验证框架概述 244
7.1.1 服务端验证 245
7.1.2 客户端验证 246
7.1.3 BaseValidator类 248
7.2 扩展验证控件的功能 250
7.2.1 客户端验证 251
7.2.2 组织服务端 252
7.3 改善验证控件的用户体验 255
7.3.1 ValidatorCallout客户端实现 256
7.3.2 ValidatorCallout服务端实现 261
7.3.3 ValidatorCalloutExtender 262
7.4 本章小结 264
第8章 模板控件 265
8.1 ASP.NET模板概述 265
8.1.1 ITemplate 266
8.1.2 TemplateContainerAttribute 266
8.1.3 设计时支持 267
8.2 实现模板控件 268
8.2.1 BookData 269
8.2.2 BookInfo控件 273
8.2.3 BookInfoDesigner 276
8.3 提供默认模板 278
8.3.1 DefaultBookInfo 278
8.4 本章小结 281
第9章 数据绑定 282
9.1 ASP.NET数据绑定框架 282
9.1.1 单向数据绑定 283
9.1.2 双向数据绑定 289
9.1.3 BindableAttribute & DataBinding
9.1.3 HandlerAttribute 300
9.2 数据绑定控件 301
9.2.1 ASP.NET 1.x数据绑定控件结构 302
9.2.2 ASP.NET 2.0数据绑定控件结构 309
9.2.3 CompositeDataBoundControl 310
9.2.4 HierarchicalDataBoundControl 320
9.3 数据绑定控件单元格 325
9.3.1 RequiredBoundField 331
9.3.2 TowStateField 333
9.4 本章小结 338
第10章 数据源控件 339
10.1 数据源控件工作原理概述 340
10.1.1 数据源控件 341
10.1.2 数据源视图 345
10.1.3 参数 356
10.2 实现数据源控件 357
10.2.1 RssDataSource 358
10.2.2 RssDataSourceView 359
10.2.3 RssDataSourceDesigner 360
10.3 实现参数对象 365
10.3.1 MethodParameter 365
10.4 本章小结 371
阶段项目C ListView 372
C.1 扩展ListView 373
C.1.1 提供原始值 373
C.1.2 双向绑定 375
C.1.3 事件管理 375
C.2 实现ListView 377
C.2.1 DataKeys 377
C.2.2 状态管理 380
C.2.3 编辑模板 384
C.2.4 事件处理 385
C.2.5 生成控件 394
C.3 实现设计器 399
C.3.1 ListViewDesigner 399
C.4 项目小结 409
第11章 WebParts 410
11.1 WebParts框架概览 410
11.2 创建WebPart 413
11.2.1 HelloWorldPart 413
11.2.2 RssWebPart 416
11.2.3 自定义谓词 421
11.3 创建WebPartZone 423
11.3.1 自动显示RSS列表的OPMLWebPart
11.3.1 Zone 424
11.3.2 定制WebPartZone布局 428
11.4 美化WebPart 434
11.4.1 定制区域边框 434
11.4.2 定制WebPartChrome呈现WebPart
11.4.2 的方式 435
11.5 目录部件 442
11.5.1 OPMLCatalogPart 444
11.6 目录区域 447
11.6.1 DragDropCatalogZone 447
11.6.2 GridViewCatalogZone 455
11.7 编辑部件 460
11.7.1 RssEditorPart 461
11.8 扩展WebPartManager 465
11.8.1 WebPartManager概述 466
11.8.2 根据角色过滤WebPart 467
11.8.3 自定义显式模式 468
11.9 本章小结 472
第12章 ASP.NET AJAX 473
12.1 ASP.NET AJAX框架 474
12.1.1 ASP.NET AJAX服务端框架 475
12.1.2 ASP.NET AJAX客户端框架 476
12.1.3 ASP.NET AJAX 组件 478
12.2 扩展ASP.NET AJAX框架功能 483
12.2.1 Sys.WebForms.PageRequestManager 483
12.2.2 实现UpdateDisabler客户端控件 484
12.2.3 实现UpdateDisabler服务端控件 488
12.3 实现ASP.NET AJAX控件 493
12.3.1 实现客户端ToolTipsControl 494
12.3.2 实现服务端ToolTipsControl 503
12.4 实现ASP.NET AJAX行为 509
12.4.1 实现客户端ToolTipsBehavior 509
12.4.2 实现服务端ToolTipsExtender 516
12.5 实现自定义ControlToolkit 521
12.5.1 AJAX Control Toolkit实现框架 521
12.5.2 实现自定义Control Toolkit客户端行为 524
12.5.3 实现自定义Control Toolkit服务端控件 531
12.5.4 Control Toolkit的设计器 535
12.6 本章小结 547
第13章 本地化、许可与保护 548
13.1 为控件提供本地化支持 548
13.1.1 实现本地化控件 551
13.1.2 实现控件设计时本地化 555
13.2 控件许可 558
13.2.1 .NET许可框架 559
13.2.2 ExpirePolicyLicense 559
13.3 保护程序集 567
13.4 本章小结 570
第14章 实现WAP控件 571
14.1 ASP.NET移动窗体的不足 572
14.2 实现WAP窗体框架 573
14.2.1 将控件状态持久在服务端 574
14.2.2 处理中文字符 576
14.2.3 组织WAP控件 578
14.3 实现WAP控件 585
14.3.1 实现MobilePage页面类 585
14.3.2 实现MobileLiteral、Card、Panel控件 592
14.3.3 实现Input和Button控件 597
14.4 测试和部署 605
14.4.1 测试WAP框架 605
14.4.2 更方便地创建WAP应用 608
14.5 本章小结 611
JeffreyZhao所作推荐序-- “道不远人”,然也
七月的某日收到了谭兄的Email,他希望我为其中有关ASP.NET AJAX的章节“把把关”。之前听说谭兄正在努力耕耘一本新书,却无缘得见,现在忽然得到了先睹为快的机会,自然欣然接受。后来得谭兄信任,我本可为整本书的内容进行技术审阅,却因为书籍出版的进度问题只得作罢,不过却也让我有幸一窥新书全貌。后谭兄又邀请我写一则推荐序,是时我大约读完了整部书稿,正好有话想说,也就“顺手”写了这么一篇“流水账”,希望能让谭兄满意。
扪心自问,如果要我评价一下国内IT技术书籍的情况,我只有拿出“失望”二字给予作答。在读者眼中,国内充斥着大量低质量的原创IT技术书籍;对于作者来说,国内极低的写作报酬和糟糕的写作氛围使他们的作品无法反映出自己的全部水准;而站在出版社的角度上看,图书出版似乎也变成越来越纯粹的商业活动,一切都要依靠商业运作。读者、作者、出版社三方互成擎肘,形成了目前稳固而病态的局面。有时候我会想,为什么读者不能多给一些鼓励和建议,少一些谩骂呢?为什么作者和出版社不能放下“利益”二字,一起为读者提供一些真正美味的精神大餐呢?如果要改变目前的情况,至少要有一方要做出让步,而让步的代价则是牺牲自己的利益,但是我们没有理由强迫任何人成为“无私的共产主义战士”。
面对这样的情况,我选择了回避。我已经有很长时间不关心国内IT技术书籍的出版情况而直接从国外进行选购,也多次婉拒了各个出版社的写作邀请。但是谭兄对此却有着自己的看法,他多次呼吁大家不要对国内计算机出版业的发展与逐渐成熟熟视无睹,不要固执的认为国产计算机图书就一定比不过引进图书。谭兄这本书的好坏,每个人都有自己的理解,但是我相信大家都能从这本书上看出,他在用自己的方式,一个IT技术书籍作者应有的方式,为他自己的呼吁做出回应。国内的IT技术书籍可能在短时间内还无法有非常明显的进步,但是谭兄和他的这本书,似乎让我找回了一丝享受阳光的信心。
我是一个“嗜书如命”的人,每年都会看完大约十余本IT技术书籍。从我的经验上来看,IT技术书籍往往可以分为 “道”和“术”两类。“道”传授的是思想,讲究的是一种沉淀,“术”传递的是“方法”,讲究的是一种表现,此正所谓“术于外,而道于内”。对于我个人来说,更倾向于阅读有关“道”的书籍,然而“术合于道,相得益彰;道术相离,各见其害”,我们也不应该忽视“术”的重要性。
写到这里,我忽然觉得刚才的话有些不妥。我们身处IT业,“唯一不变的只有变化本身”,可能更多人等不及“道”的沉淀,我们可能更需要“术”所带来的快速回报。我们所接受到的“术”已太多,却难觅“道”的踪影。君不见,越来越多的开发人员认为30岁会成为他们程序员生涯的“大限”,越来越多的开发人员在抱怨他们正为日新月异的技术所累。在我看来,这些正是因为缺少了“道”的缘故。我们太过追求于“术”本身,而缺少了“道”的积累。
我曾多次建议一些如此抱怨的朋友们平缓心情,将思维跳开技术运用(也就是“术”)本身,将目光投向技术其他一些方面,例如某种技术的形成原因(从中可以寻找“道”的痕迹)等等。但是实践证明,这样的建议并没有太高的可行性,因为大多数人最需要了解的还是大量的技术运用。也正因为如此,市场上最受欢迎的往往是一些由大量实例组成的书籍。这样的书籍可以给读者带来快速产出的成就感,正如同微软技术大会上的新技术演示一般的令人愉悦。
我认为,“道”和“术”两类书籍不该以同样的准则来判断其好坏,因为他们既然方向不同,为什么要强求“殊途同归”呢?对于 “术”书来说,我主要通过知识面的“完整性”和示例的“成熟度”来评价其优劣。我平时也常阅读一些“术”书来了解新技术,经常会感到某些书籍覆盖的知识面不很完整,其中的例子也并不成熟,很难将其直接运用在生产中,甚至有时候会在读完之后感到自己掌握了不少,在实际运用中却发现依旧什么都不会——相信不少朋友和我有过同样的感受。
让我欣喜的是,谭兄的这本书在知识面的“完整性”和示例的“成熟度”上都让我比较满意。这是一本关于ASP.NET的书,确切地说是一本关于ASP.NET控件开发的书,它覆盖了控件开发的各个方面,更包含了一些以往不为人所重视的内容。例如,我看到书中有关ASP.NET对于客户端脚本支持的章节时心想,如果更多人能够早点接触到这部分内容,那么大家对于目前ASP.NET AJAX的掌握就能更加轻松和愉快了——当初我收到次数最多的问题就是“为什么使用Response.Write方法输出脚本会导致UpdatePanel失败?”,而我的答案,也就是书中强调的一点,那就是“杜绝使用Response.Write方法,而使用ASP.NET框架的相关支持来注册脚本”——这是一种方法,更是一种习惯或准则:如果我们使用框架提供的“正统”方法进行开发,世界将会变得更加美好。至于示例,我想则更不用多说,大家可以直接将书翻至DateChooser项目,享受一下阅读一个完整而实用的示例所带来的爽快感觉。
之前在和谭兄的聊天中曾听他谈到过写这本书的目的,就是希望更多人能够了解到“只要方法正确,开发ASP.NET控件并不困难”。这本书虽传递的是“术”,但是却也在寻觅着“道”的踪迹。虽说大部分开发人员并不会涉及ASP.NET控件的开发,但是我依旧会向他们推荐这本书——如果他们需要一些提高ASP.NET技术能力的资源。因为我认为这本书更重要的作用是帮助读者掌握ASP.NET的一个关键部分,那就是ASP.NET的控件模型。如果您还能够从中得出更深层次的体会,那么这本书的价值就被充分地挖掘出来了——其实我们都在追求着“道”,不是吗?
刚欲搁笔,忽又想起了本书的标题——“道不远人”。然也。
赵劼
2008年8月19日凌晨
网上订购地址:
http://www.dearbook.com/book/213157http://www.china-pub.com/computers/common/info.asp?id=35849