本书以清晰的条理、精炼的例子把初学者带入ASP.NET 2.0的世界。
全书共分四个部分。“基础篇”在涵盖了基础知识的同时以留言簿的示例让初学者快速入门,迅速激发学习的热情。“技术篇”在覆盖常用技术的同时也涉及到了ASP.NET的一些底层实现。“提高篇”通过讲解进阶技术,帮助读者编写出更好的代码,开发出更强大的ASP.NET应用程序。“扩展篇”介绍了ASP.NET 2.0常见的企业级开发构架和技术,为读者以后的深入学习作好了铺垫。
第Ⅰ部分 基 础 篇
第1章 Web编程概述 2
1.1 浏览器/服务器(B/S)模型 2
1.1.1 客户端/服务器(C/S)模型的问题 2
1.1.2 浏览器/服务器(B/S)模型的优劣 2
1.2 Web服务器与Web请求 3
1.3 Web开发技术的发展 3
1.3.1 客户端技术的发展 3
1.3.2 服务端技术的发展 5
1.3.3 J2EE vs微软.NET 6
1.4 ASP.NET技术 6
1.4.1 彻底的颠覆——ASP.NET与ASP 6
1.4.2 更强更完善——ASP.NET 2.0与1.1 7
1.5 其他基础知识 8
1.6 回顾与总结 8
第2章 建立开发环境 9
2.1 安装IIS 9
2.2 安装.NET框架与集成开发环境 10
2.3 熟悉IIS 12
2.3.1 注册ASP.NET 2.0 12
2.3.2 了解IIS的设置 13
2.3.3 配置虚拟目录 15
2.4 熟悉集成开发环境 16
2.5 回顾与总结 17
第3章 C#编程基础 18
3.1 创建你的第一个C#程序 18
3.2 变量和运算 20
3.2.1 单值类型 20
3.2.2 类型转换 21
3.2.3 枚举与数组类型 23
3.2.4 运算操作 24
3.2.5 四则运算的例子 27
3.3 字符串操作 28
3.4 流程控制 30
3.4.1 流程控制概述 30
3.4.2 选择语句 31
3.4.3 迭代语句 33
3.4.4 冒泡排序的例子 37
3.4.5 字符串与整数互转的例子 38
3.5 了解面向对象编程 40
3.5.1 面向对象概述 40
3.5.2 冒泡排序类 40
3.5.3 类和成员 46
3.5.4 值类型和引用类型 48
3.5.5 汽车类的例子 50
3.6 回顾与总结 53
第4章 强大的.NET类库 55
4.1 常用命名空间 55
4.1.1 基础命名空间 55
4.1.2 图形命名空间 55
4.1.3 数据命名空间 56
4.1.4 Web命名空间 56
4.1.5 框架服务命名空间 56
4.1.6 安全性命名空间 57
4.1.7 网络命名空间 57
4.1.8 配置命名空间 57
4.1.9 本地化命名空间 58
4.2 集合类型 58
4.2.1 System.Collections命名空间概述 58
4.2.2 使用ArrayList类型 58
4.2.3 使用Hashtable类型 60
4.2.4 使用SortedList类型 62
4.2.5 使用Stack类型 64
4.2.6 泛型集合 68
4.3 磁盘操作 69
4.3.1 System.IO命名空间概述 69
4.3.2 使用DriveInfo类型读取
驱动器信息 70
4.3.3 使用Directory和DirectoryInfo
类型操作目录 70
4.3.4 使用File和FileInfo类型
操作文件 72
4.3.5 使用StreamReader和StreamWriter
类型读写文件 73
4.4 反射 75
4.4.1 System.Relection命名空间概述 75
4.4.2 反射对象的成员 78
4.4.3 反射对象的字段 78
4.4.4 反射对象的属性 79
4.4.5 反射对象的方法 80
4.5 图形图像处理 80
4.5.1 System.Drawing命名空间概述 80
4.5.2 生成验证码的例子 81
4.5.3 生成缩略图的例子 83
4.5.4 生成黑白图的例子 85
4.6 网络 86
4.6.1 从远程地址下载文件的例子 86
4.6.2 Ping操作的例子 87
4.7 回顾与总结 87
第5章 数据库基础 89
5.1 使用IDE连接SQL Server 89
5.2 创建数据库与表 90
5.3 SQL查询 93
5.3.1 记录添加 94
5.3.2 记录修改 94
5.3.3 记录删除 95
5.3.4 单表查询 95
5.3.5 多表查询 97
5.3.6 聚合函数 98
5.3.7 分组查询 98
5.3.8 子查询 99
5.4 存储过程 99
5.4.1 存储过程与参数 99
5.4.2 存储过程与事务 102
5.4.3 声明变量与循环 103
5.5 回顾与总结 104
第6章 快速入门——简易留言簿 105
6.1 编码前的准备 105
6.1.1 回顾基本概念 105
6.1.2 设计数据结构 106
6.2 实现 106
6.2.1 创建数据库 106
6.2.2 实现发表留言功能 107
6.2.3 显示用户发表的留言 113
6.2.4 管理员操作 116
6.3 回顾与总结 120
第Ⅱ部分 技 术 篇
第7章 .NET框架与ASP.NET 122
7.1 .NET框架体系结构概述 122
7.2 公共语言运行库CLR 122
7.2.1 公共语言运行库概述 122
7.2.2 编译的过程和原理 123
7.2.3 CLR的自动内存管理 124
7.3 程序集 124
7.3.1 程序集概述 125
7.3.2 程序集的构成 125
7.3.3 构建程序集信息 126
7.4 应用程序域 129
7.4.1 应用程序域概述 129
7.4.2 应用程序域编程 129
7.5 ASP.NET代码结构与编译 132
7.5.1 ASP.NET代码模型 132
7.5.2 ASP.NET 2.0的保留文件夹 135
7.5.3 ASP.NET 2.0页面模型 136
7.5.4 ASP.NET 2.0编译模型 138
7.6 ASP.NET请求和响应 142
7.6.1 ASP.NET应用程序的生命周期 142
7.6.2 ASP.NET处理管线 143
7.6.3 HttpRequest对象 145
7.6.4 HttpResponse对象 147
7.6.5 访问记录程序 147
7.6.6 文件下载程序 148
7.6.7 ASP.NET页面生命周期 149
7.7 ASP.NET事件模型 152
7.7.1 ASP.NET事件模型概述 152
7.7.2 ASP.NET服务器控件事件模型 153
7.8 ASP.NET 2.0 Provider模型概述 156
7.8.1 Provider模型概述 156
7.8.2 Provider模型基本结构 157
7.8.3 ASP.NET 2.0中的Provider 158
7.9 回顾与总结 160
第8章 服务器控件 162
8.1 服务器控件概述 162
8.1.1 传统的解决方案 162
8.1.2 ASP.NET的解决方案 163
8.1.3 使用IDE添加控件 163
8.1.4 控件的属性 164
8.1.5 控件的标签 165
8.1.6 特殊的服务器控件 166
8.2 服务器控件的层次结构 167
8.2.1 控件的层次结构与基类 167
8.2.2 使用程序访问控件 168
8.2.3 使用智能感知熟悉控件 169
8.2.4 Web服务器控件层次结构 170
8.2.5 HTML服务器控件层次结构 171
8.3 服务器控件树 172
8.3.1 使用程序输出控件树 172
8.3.2 LiteralControl控件 174
8.4 服务器控件的事件 176
8.4.1 为控件添加事件 176
8.4.2 事件参数与自动回发 177
8.4.3 服务端事件与客户端事件 178
8.5 服务器控件的使用 180
8.5.1 下拉列表控件DropDownList 181
8.5.2 多选框列表控件CheckBoxList 182
8.5.3 文件上传控件FileUpload 183
8.5.4 多重视图控件MultiView 185
8.5.5 必须字段验证控件
RequiredFieldValidator 186
8.6 网络文件夹的例子 187
8.6.1 网络文件夹的界面预览 187
8.6.2 网络文件夹的功能需求 188
8.6.3 网络文件夹的代码实现 188
8.7 回顾与总结 199
第9章 ADO.NET数据访问模型 200
9.1 ADO.NET概述 200
9.2 连接数据库 201
9.2.1 连接字符串 201
9.2.2 使用Connection对象
连接数据库 202
9.2.3 使用ConnectionStringBuilder
构建连接字符串 206
9.2.4 枚举所有可用数据源 207
9.3 执行SQL语句 207
9.3.1 回顾论坛数据库 207
9.3.2 使用SqlCommand执行
SQL语句 208
9.3.3 SQL注入带来的威胁 211
9.4 使用参数化SQL与存储过程
提高安全性 213
9.4.1 使用参数来防止SQL注入 213
9.4.2 创建存储过程 214
9.4.3 使用SqlCommand对象执行
存储过程 215
9.5 使用DataReader访问数据 216
9.5.1 使用DataReader读取单记录集 216
9.5.2 使用DataReader读取多记录集 218
9.6 DataSet数据容器 220
9.6.1 DataSet对象的基本结构 220
9.6.2 创建DataSet 221
9.6.3 访问DataSet 222
9.6.4 使用DataRelation实现父子表 224
9.7 离线模式操作数据库 226
9.7.1 使用DataAdapter来获取数据 226
9.7.2 使用DataAdapter来更新数据 229
9.8 回顾与总结 233
第10章 数据绑定与数据绑定控件 234
10.1 数据绑定概述——简化数据访问和
实现页面与程序的分离 234
10.1.1 单值绑定 234
10.1.2 绑定表达式 235
10.2 重复值绑定 237
10.2.1 各种类型的数据源 237
10.2.2 支持数据源绑定的控件 238
10.2.3 把数据源绑定到控件 239
10.3 复杂数据绑定控件之GridView 242
10.3.1 回顾论坛数据库结构 242
10.3.2 把数据源绑定到GridView 243
10.3.3 GridView的绑定列与模板列 244
10.3.4 GridView的事件 250
10.3.5 对你的GridView进行美化 256
10.3.6 格式化GridView 261
10.3.7 数据的排序与分页 262
10.4 复杂数据绑定控件之DataList——在
一行中显示多条记录 266
10.4.1 DataList的属性与模板 266
10.4.2 DataList的模板与事件 268
10.5 复杂数据绑定控件之Repeater——完成
论坛分类和版块管理 271
10.5.1 使用Web.config存储
连接字符串 271
10.5.2 使用Repeater呈现父子
表数据 272
10.6 回顾与总结 278
第11章 ASP.NET应用程序统筹 280
11.1 ASP.NET应用程序统筹概述 280
11.1.1 大型系统的需求 280
11.1.2 ASP.NET的解决方案 280
11.2 母版页——构建具有统一外观的
应用程序 281
11.2.1 创建母版页 281
11.2.2 创建基于母版页的Web窗体 283
11.2.3 以编程方式访问母版页 286
11.3 为你的网站创建主题和皮肤 286
11.3.1 CSS样式概述 286
11.3.2 使用CSS统一页面样式 290
11.3.3 创建与应用主题 291
11.3.4 创建控件的皮肤 293
11.3.5 切换网站主题 295
11.4 用户控件 299
11.4.1 创建用户控件 299
11.4.2 使用用户控件 302
11.4.3 以编程方式访问用户控件 304
11.5 本地化和资源——创建多语言网站 304
11.5.1 生成本地资源 304
11.5.2 创建多语言资源文件 307
11.5.3 实现多语言切换 308
11.5.4 以编程方式访问本地资源 309
11.5.5 创建和使用全局资源 310
11.6 导航控件和站点地图 311
11.6.1 创建自动的导航路径 311
11.6.2 多语言和多主题的导航 313
11.7 回顾与总结 315
第12章 状态管理——记录你网站访客的活动 316
12.1 状态管理概述 316
12.1.1 状态管理与数据库 316
12.1.2 状态管理的比较参数 316
12.2 Cookie 317
12.2.1 Cookie概述 317
12.2.2 Cookie的使用 317
12.2.3 Cookie总结 320
12.3 Session 320
12.3.1 Session概述 320
12.3.2 Session的使用 321
12.3.3 把Session存储在独立
的进程中 322
12.3.4 把Session存储在数据库中 324
12.3.5 Session的使用范围与
大小限制 325
12.3.6 Session的生命周期 327
12.3.7 遍历与销毁Session 328
12.3.8 Session的常见问题与总结 328
12.4 Application 329
12.4.1 全局应用程序类 329
12.4.2 使用Application统计
网站访问 331
12.4.3 Application总结 332
12.5 Cache 333
12.5.1 Cache概述 333
12.5.2 Cache性能与过期策略 333
12.5.3 Cache的更新策略 337
12.5.4 Cache总结 339
12.6 隐藏域/ViewState/ControlState——保存
数据的另一个场所 339
12.6.1 使用隐藏域 339
12.6.2 使用ViewState 340
12.6.3 ViewState的安全与性能 340
12.6.4 ControlState概述 343
12.6.5 总结 343
12.7 以人为本的Profile 343
12.7.1 使用Profile制作个性化页面 343
12.7.2 Profile总结 348
12.8 其他 349
12.8.1 QueryString 349
12.8.2 跨页提交 349
12.9 完善论坛 350
12.10 回顾与总结 355
第13章 强类型DataSet 357
13.1 强类型DataSet概述 357
13.2 使用强类型DataSet进行数据访问 357
13.3 论坛程序总结 368
13.4 回顾与总结 371
第Ⅲ部分 提 高 篇
第14章 请求上下文 374
14.1 HTTP上下文简介 374
14.2 HttpHandler 375
14.2.1 Http处理程序简介 375
14.2.2 自定义HTTP处理程序——实现
图片防盗链的功能 375
14.2.3 IhttpHandlerFactory——实现
文件下载管理 379
14.3 HttpModule 384
14.3.1 Http模块简介 384
14.3.2 创建简单的Http模块——一个
IP过滤的例子 384
14.4 回顾与总结 386
第15章 保护你的ASP.NET应用程序 387
15.1 ASP.NET应用程序安全概述 387
15.1.1 安全相关的名词 387
15.1.2 ASP.NET安全结构 387
15.1.3 身份验证方式 388
15.2 用户账户模拟 388
15.2.1 一个模拟请求用户的例子 388
15.2.2 模拟某一个用户 392
15.2.3 使用编程方式进行临时模拟 392
15.3 基于Windows的身份验证 394
15.3.1 概述 394
15.3.2 配置IIS安全 394
15.3.3 配置Windows安全 395
15.3.4 配置Windows身份验证 397
15.3.5 配置Windows授权 397
15.3.6 实现自定义角色 398
15.3.7 获取用户信息 399
15.4 基于表单的身份验证 399
15.4.1 概述 399
15.4.2 启用表单身份验证 399
15.4.3 配置表单身份验证 400
15.4.4 配置表单授权——一个限制
匿名下载的例子 402
15.4.5 登录与注销 403
15.4.6 使用Web.config进行
身份验证 405
15.4.7 获取用户信息 406
15.5 ASP.NET 2.0的成员资格和
角色管理器 406
15.5.1 成员资格概述 406
15.5.2 成员资格的配置 407
15.5.3 角色管理器概述 409
15.5.4 角色管理器的配置 410
15.5.5 安全性相关的控件 411
15.5.6 ASP.NET网站管理工具 412
15.5.7 成员资格和角色管理器
API编程 413
15.6 安全性相关的控件 413
15.6.1 ASP.NET登录控件概述 413
15.6.2 登录控件 414
15.6.3 创建用户向导控件 414
15.6.4 密码恢复控件 415
15.6.5 修改密码控件 415
15.6.6 其他控件 415
15.7 ASP.NET网站管理工具 416
15.7.1 ASP.NET网站管理工具概述 416
15.7.2 用户管理 417
15.7.3 角色管理 418
15.7.4 访问规则管理 420
15.7.5 其他配置 421
15.8 成员资格和角色管理API编程 422
15.8.1 成员资格API概述 422
15.8.2 角色管理API概述 423
15.8.3 创建、修改、获取和
删除用户 423
15.8.4 验证和解锁用户 425
15.8.5 角色管理 426
15.8.6 角色验证 428
15.8.7 其他重要成员 428
15.9 回顾与总结 429
第16章 Web Part让网站个性化 430
16.1 Web Part概述 430
16.2 进一步了解Web Part 431
16.2.1 Web Part的层次结构 431
16.2.2 ASP.NET中的Web Part
控件 431
16.3 使用Web Part 432
16.3.1 创建一个简单的个性化页面 433
16.3.2 页面显示模式介绍 434
16.3.3 在页面中添加Web Part 437
16.3.4 在页面中编辑Web Part 439
16.3.5 Web Part的导入和导出 442
16.3.6 Web Part之间的通信 444
16.4 回顾与总结 449
第17章 Ajax无刷新技术 450
17.1 Ajax概述 450
17.1.1 什么是Ajax 450
17.1.2 Ajax历史 450
17.2 Ajax工作原理 451
17.3 微软ASP.NET Ajax 453
17.3.1 ASP.NET Ajax概述 453
17.3.2 ScriptManager控件 453
17.3.3 ScriptManagerProxy控件 455
17.3.4 UpdatePanel控件 457
17.3.5 UpdateProgress控件 458
17.3.6 Timer控件 459
17.3.7 ASP.NET Ajax与Web Service
的配合 460
17.3.8 ASP.NET Ajax应用示例:无
刷新留言簿 463
17.4 ASP.NET Ajax Control Toolkit 465
17.5 Ajax的优势与不足 466
17.5.1 Ajax应用优势 466
17.5.2 Ajax的不足 466
17.6 脚本调试 467
17.7 回顾与总结 467
第18章 性能与安全 468
18.1 性能优化概述 468
18.2 编码级别性能优化 468
18.2.1 数据访问 468
18.2.2 字符串操作 469
18.2.3 释放资源 470
18.2.4 其他优化 471
18.3 页面级别性能优化 472
18.3.1 页面缓存 472
18.3.2 视图状态 473
18.3.3 页面加速 473
18.3.4 其他优化 473
18.4 构架级别性能优化 474
18.4.1 数据缓存 474
18.4.2 分布式程序 474
18.4.3 分布静态资源 475
18.4.4 其他优化 475
18.5 配置与部署性能优化 475
18.5.1 网站配置 475
18.5.2 网站部署 476
18.6 安全概述 476
18.7 页面与编码相关安全防护 477
18.7.1 控件与页面 477
18.7.2 状态机制 478
18.7.3 SQL注入 478
18.7.4 提示信息 479
18.8 构架相关安全防护 479
18.8.1 隔离数据库 479
18.8.2 独立的操作日志模块 479
18.9 服务器配置相关安全防护 480
18.9.1 细化数据库权限 480
18.9.2 SSL/HTTPS 480
18.10 其他安全措施 480
18.10.1 防恶意提交 480
18.10.2 跳转令牌 480
18.10.3 重复确认身份 481
18.10.4 防跨网站脚本 481
18.11 回顾与总结 481
第19章 调试与错误处理 482
19.1 编码习惯 482
19.1.1 代码格式化 482
19.1.2 命名 483
19.1.3 其他 484
19.1.4 代码注释 484
19.1.5 版本跟踪 486
19.2 发现错误 486
19.2.1 编译错误 486
19.2.2 断点调试 487
19.2.3 跟踪应用程序 491
19.3 处理错误 492
19.3.1 异常概述 492
19.3.2 捕获和处理异常 493
19.3.3 自定义错误页 495
19.4 回顾与总结 496
第20章 打包与部署 497
20.1 发布网站 497
20.2 打包网站 500
20.2.1 创建Web安装项目 500
20.2.2 Web安装项目的细节 502
20.3 回顾与总结 506
第21章 学成出师——单点登录系统 507
21.1 单点登录的例子 507
21.1.1 单点登录概述 507
21.1.2 单点登录基本思想 507
21.2 实现单点登录 508
21.3 使用令牌增进安全 516
21.4 总结和概述 525
第IV部分 扩 展 篇
第22章 常见的数据访问方式 528
22.1 数据访问概述 528
22.1.1 常见的数据访问方式 528
22.1.2 回顾ADO.NET直接方式 528
22.1.3 回顾强类型DataSet方式 529
22.2 ADO.NET封装方式 530
22.3 从数据访问中解放——ORM方式 531
22.3.1 ORM概述 531
22.3.2 使用NHibernate制作留言簿 531
22.4 ORM的妥协——Sql Map方式 542
22.4.1 Sql Map概述 542
22.4.2 使用IBatisNet制作留言簿 542
22.5 随心所欲——代码生成方式 549
22.5.1 代码生成概述 549
22.5.2 代码生成方案举例 549
22.6 回顾与总结 557
第23章 分布式应用程序 559
23.1 分布式应用程序概述 559
23.2 Web服务 560
23.2.1 创建Web服务 560
23.2.2 HTTP-GET方式的Web服务 564
23.2.3 异步调用Web服务 565
23.3 .NET Remoting 567
23.3.1 第一个.NET Remoting
应用程序 567
23.3.2 Remoting的信道 571
23.3.3 使用配置文件增加灵活性 573
23.3.4 使用接口降低耦合 575
23.3.5 使用Windows服务承载
远程对象 578
23.3.6 异步操作 581
23.4 回顾与总结 582
第24章 分层与构架 583
24.1 分层与构架概述 583
24.2 多层构架 583
24.2.1 多层构架概述 583
24.2.2 使用三层构架重写留言簿 585
24.3 依赖注入框架 592
24.3.1 依赖注入概述 592
24.3.2 使用Spring.NET进行
依赖注入 596
24.4 回顾与总结 598
第25章 学习资源 599
25.1 官方资料 599
25.2 技术博客 599
25.3 技术网站 600
25.4 技术论坛 600
朱晔微软最有价值专家(2006年、2007年ASP.NET领域MVP),CSDN社区ASP.NET版主,博客园排名20。自2000年开始致力于Web开发的研究和推广。爱好.NET技术,长期活动于CSDN社区和博客园,并在业余时间参与翻译.NET书籍(近期译作《ProC#2005 and the.NET 2.0 Plat-form,Third Edition》)。现就职于上海麦格特尔网络科技有限公司。
欢迎读者通过个人博客(http://WWW.cnblogs.com/LoveCherry/)或MSN(邮件):
yzhu@live.corn和我交流、探讨技术。
本书是一本ASP.NET 2.0的入门书籍,针对未接触过ASP.NET开发(但是读者需要有一定的计算机基础和其他编程语言的基础)或者有一些ASP.NET 1.1开发经验的编程爱好者自学使用。笔者也是从一个初学者走过来的,从ASP、PHP到ASP.NET 1.1/2.0一路上靠的都是自学,我深深体会到对于任何一门技术来说往往是两头难,也就是入门难,精通难。对于学习Web开发来说更是如此,Web开发不是一门语言,而是多种技术、多个语言的集合。通常,要构建一个大型的网站需要如下的一些专业人员。
• 网络工程师。负责服务器和网络设备硬件软件的部署和调试。
• 网络程序员。负责网站程序部分的开发。
• 美术设计师。负责网站的美术设计,风格设计。
• 数据库管理员。负责数据库编程和优化。
当然,如果是制作一个小网站的话这些职务就只能由一个人承担了。
• 要学会服务器、交换机等设备的安装,服务器操作系统的安装配置。
• 要有一定的美术设计能力,会使用Photoshop等软件进行设计。
• 要掌握一定的数据库知识,学会Sql Server等数据库的使用和优化。
• 要掌握一门Web编程语言,比如会使用ASP.NET开发网站。
一名合格的网络程序员不但需要了解自己领域的一些专业技术,而且很多时候还需要充当半个网络工程师、半个美术设计师和半个数据库管理员。想到这些,初学者就害怕了。入门虽说不易,但一个好的切入点能让你快速入门。为了能让你入门,本书的策略是从实际的东西到抽象的东西,从必要的技术到辅助的技术,在入门以前不谈实质。笔者承认从一门技术的底层开始学习能有一个扎实的基础,但是这样的入门方式实在是太漫长了,不如从实际的东西开始,先尝试做出一些东西,然后再去探究原因,这种曲折式的学习方法更适合初学者。
市面上的技术书籍大多分如下两种。
• 以知识点划分章节。70%的书都是这样。这种类型的书,优点是对一门技术有一个系统的介绍,缺点是切入点不明确,初学者往往需要看几遍才能入门,而入门后才发现书的后10章(相对深入的一些内容)没有什么用处。
• 以大型实例划分章节。整个书就是2~3个大型的实例,满书的源代码,而且源代码的质量往往不怎么高。初学者看了以后不能入门,而入门的人也不再需要看这些书了,因为这些所谓的实例自己都可以做出来。
本书的特点:
• 笔者把知识点进行了充分打散,在保证知识点相对集中的情况下又把知识点按照难易程度进行分配。而且,对于一些华而不实的知识点本书都是一笔带过,笔者认为一本入门书籍不能把读者带入误区,初学者的接受能力有限,一定要让他们首先了解最重要的知识点而不是一些用得比较少而又比较难的知识点。
• 本书的示例也非常有特点,小知识点的示例简单精炼,构架方面知识点的示例实际而又有效(比如在介绍数据访问、无刷新的时候都是以同一个留言簿的程序为例子),在介绍ASP.NET核心知识的时候又使用了贯穿的论坛作为大例。根据不同的需求来使用不同规模的例子,既不浪费篇幅又能全方位解析知识点。
笔者始终认为初学者最需要的不是一本大全或者宝典,他们最需要以下两样东西。
• 基本而实用的例子来建立信心。
• 开发的经验和心得避免今后走弯路,这是初学者最欠缺的。
因此,笔者认为三种书是有用的。
• 纯粹给初学者看的书。用一步一步手把手的方式教大家在实例中入门,看了以后既能做出一定的东西又知道了一些原理。
• 包含了实际经验的书。体现出作者多年的实战经验,能让入门的人迅速提升功力,在构架和设计上得到提高。
• 纯粹给高手看的书。只剖析底层的实现,不涉及应用上的一些东西。
本书既有大量的向导实例,又穿插了很多开发的经验。能让初学者每一次阅读本书都有收获,如果你能认真阅读三遍,那么你肯定入门了。
很多初学者会问,Java和.NET我学哪一种?哪个比较有前途?我知道,他们是在担心学的技术很快会落伍,担心学的技术没有前景。常说选择是痛苦的,但我认为根本没有必要选择。编程语言之间都是相通的,对一门编程语言达到精通的人来说,转向另外一门语言的学习和开发不会发生本质转变。其实,编程技术和武侠小说里面的武功有很多相像之处。武功分内功和招式两部分,所谓内功是习武之人多年积累下来的武术功底,内力强大的人无论学哪一种武功都能快速掌握并发挥出威力。相反,招式只是应用上的东西,如果只学招式不练内功那么再好的武功都仅仅是花拳绣腿。初学.NET的时候可能你需要花1年的时间入门,做了5年.NET后你会发现即使项目彻底转向Java,你也只需要1个月的时间就能入门。如果你做了5年.NET而转向另外一种技术的学习和开发,这5年绝不是白费的。因此,在入门以后你积累的一些经验就好似内功积淀了下来。举例来说,你知道使用.NET做设计的时候,哪里会是性能上的瓶颈,即使转向Java,这个经验也能给你提供很大的帮助。
读者可能会关心何种学习方式才是合理的,笔者结合自己的经验谈一谈。每个人的入门方式可能都不一样。
• 有人是因为一个无奈的项目入门,客户一定要使用ASP.NET。而我只会ASP,只能硬着头皮上。
• 有人是因为一门课程入门,学校开了一门ASP.NET的课程。在考试结束后,突然发现还挺有趣的。
• 有人是因为兴趣入门,这种没有任何压力的入门方式是最难的,因为不容易找到突破口。
对于初学者笔者推荐如下的入门方式(针对Web开发来说)。
1.了解一些最基本的概念和技术。
2.构建开发平台。安装配置开发环境。
3.周边核心技术的学习。开发语言、开发脚本。
4.快速入门。调试成功一个完整的实例,比如使用书上的代码制作一个留言簿,然后琢磨每一个语句的作用。
5.不看书自己尝试做一个最简单的东西。
6.系统学习一些具有实践价值的知识,结合自己的练习。
7.看一些别人写的代码,在理解代码的基础上进行总结。
8.至此你已经入门了,做两个具有一定意义的中型项目(比如论坛和图书馆系统),能让你从入门到熟练。
在整个学习过程中,你还要学会使用一些工具来解答你的问题。因为不是每一个初学者的周围都会有高手回答自己的问题。我们要学会自己解决问题。
• 最好的搜索——Google。一定要学会搜索,全世界这么多人在学习ASP.NET,如果你遇到问题,这个问题99%别人也遇到过。现在网络这么发达,无数人在BLOG、论坛分享自己的解决方案。相信50%的问题,Google能告诉你答案。
• 最好的参考——MSDN。不知道怎么用某一个类、方法不要紧,MSDN对所有的类型都会有最准确而详细的解释。不用去买什么参考书籍,MSDN上的内容不但时效性强而且准确。
• 最好的老师——论坛。实在遇到了一个奇怪的问题又不知道怎么搜索,你可以在论坛上求助(比如CSDN社区),网友会热心解答,尝试在多个技术论坛提出问题得到解答的概率会高很多。
本书既在广度上覆盖了Web开发的方方面面(包括最新的、流行的技术)又不放弃很多细节。那么,怎么样阅读本书才能达到最大的效果呢?
• 如果你从未接触过Web开发。可以先看1、2两章后直接看第6章快速入门,建立信心。然后再从头开始看,在看的过程中遇到看不懂的直接跳过去,比如在看第9章的时候看到最后一节看不懂,那就请直接看第10章,看完第10章再回头看第9章。你会发现每一次重复阅读以前看过的章节都会有新的收获。
• 如果你接触过Web开发,但未接触过.NET开发。可以重点看第4、5章,多做一些小例子,从熟悉C#语言开始,然后再重点阅读与ASP.NET特性相关的一些章节(第8~12章)。
• 如果你曾接触过ASP.NET 2.0以前版本的开发。可以粗略阅读技术篇(看看2.0多了哪些特性)然后重点阅读提高篇,让自己的知识在广度上有一个扩展。
• 如果你已经有ASP.NET 2.0的开发经验。阅读扩展篇能让你在构架上有一个初步的认识。其他章节你也可以通读,补上自己基础知识的漏洞。
最后要感谢我的朋友们(特别是卓见、朱磊、苏宁、马国鹏、沈绍虞以及龚耀武)在整个过程中给我的很多帮助和意见。
一句话,希望本书对读者有用。当然,由于时间仓促,书中难免有一些错误。在阅读的过程中有任何问题,都可以直接和笔者进行联系:yzhu@live.com。
无封面