第1章 模型-视图-控制器模式 1
1.1 MVC的发展历程 1
1.2 MVC的原理 2
1.3 MVC模式的工作流程 2
1.3.1被动视图 3
1.3.2表示模型 4
1.4模型-视图-表示器模式 5
1.5 MVC相对于传统Web开发模式的优势 7
1.5.1单元测试 7
1.5.2测试驱动开发 8
1.5.3首先设计接口的方式 8
1.6小结 8
1.7练习 9
第2章ASP.NETWebForms与ASP.NET MVC 11
2.1概述 11
2.2 ASP.NET WebForms与ASP.NETMVC的比较 12
2.2.1 ASP.NET WebForms存在的问题 12
2.2.2 ASP.NET MVC解决ASP.NETWebForms问题的方式 14
2.3编程模型 14
2.3.1 ASP.NET WebForms编程模型 15
2.3.2 ASP.NET MVC编程模型 15
2.4 ASP.NET开发的主要元素 16
2.5 ASP.NET、 ASP.NET WebForms以及ASP.NET MVC之间的关系 17
2.6 ASP.NET MVC中MVC模式的实现 18
2.6.1 ASP.NET MVC中的模型 19
2.6.2 ASP.NET MVC中的控制器 19
2.6.3 ASP.NET MVC中的视图 20
2.6.4 ASP.NET MVC中的路由 21
2.7小结 22
2.8练习 22
第3章ASP.NET MVC入门 23
3.1安装ASP.NET MVC 23
3.2创建ASP.NET MVC项目 24
3.3检查解决方案的结构 26
3.3.1控制器 26
3.3.2视图 27
3.3.3模型 28
3.3.4 ASP.NET MVC的应用程序类 28
3.3.5 Web配置文件 29
3.3.6内容文件 30
3.3.7脚本文件 30
3.4测试项目 30
3.5一个ASP.NET MVC示例 32
3.6小结 40
3.7练习 40
第4章 模型 41
4.1 Microsoft为MVC中的“M”提供的内容 42
4.2模型概述 42
4.3用于构建模型的不同选项 43
4.4 LINQ to SQL 43
4.5 ADO.NET数据库对象 47
4.6 ADO.NET Entity Framework 50
4.7 XML 55
4.8有关创建数据模型的重要注意事项 58
4.9第三方组件和工具 58
4.10小结 59
4.11练习 59
第5章 控制器 61
5.1控制器的职责 61
5.2创建控制器 62
5.3定义动作 63
5.4向视图传递数据 66
5.5从请求检索数据 71
5.5.1动作参数 71
5.5.2在动作中绑定数据 75
5.6动作结果的类型 76
5.6.1 ViewResult 77
5.6.2 PartialViewResult 77
5.6.3 RedirectResult 78
5.6.4 RedirectToRouteResult 80
5.6.5 JsonResult 82
5.6.6 JavaScriptResult 83
5.6.7 ContentResult 83
5.6.8 FileContentResult 83
5.6.9 EmptyResult 84
5.7使用核心ASP.NET对象 84
5.8小结 85
5.9练习 85
第6章 视图 87
6.1视图的职责 87
6.2视图的结构 87
6.3使用Visual Studio创建视图 89
6.3.1松散类型视图 89
6.3.2强类型视图 91
6.4使用ASP.NET MVC方式编写HTML 94
6.4.1生成链接的辅助方法 94
6.4.2表单辅助方法 97
6.4.3验证辅助方法 110
6.5其他内容 112
6.6编写自己的辅助方法 114
6.7创建视图的快捷方式 116
6.8小结 119
6.9练习 120
第7章 路由 121
7.1没有路由时的状况 121
7.2重要概念 122
7.3路由剖析 122
7.3.1 URL属性 123
7.3.2 Defaults属性 123
7.3.3 Constraints属性 124
7.3.4 DataTokens属性 127
7.3.5 RouteHandler属性 130
7.4注册路由的方式 131
7.5使用ASP.NET MVC更简单地管理路由 133
7.6调试路由 134
7.7小结 135
7.8练习 135
第8章 单元测试概念 137
8.1单元测试的含义 137
8.2单元测试的结构 138
8.2.1测试的四个阶段 139
8.2.2固定装置 139
8.2.3执行顺序 139
8.2.4用于控制测试的特性 140
8.2.5结果验证 140
8.2.6代码覆盖率 141
8.3使用Visual Studio编写测试程序 142
8.3.1 Visual Studio测试用户界面 143
8.3.2编写第一个测试类 147
8.4测试依赖于外部组件的类 150
8.4.1使测试变得更容易的模式 151
8.4.2使用测试替身 154
8.4.3模拟对象 156
8.5小结 159
8.6练习 159
第9章 测试ASP.NET MVC应用程序 161
9.1为ASP.NET MVC创建测试项目 161
9.2不使用模拟的测试 162
9.2.1测试用于呈现内容的动作 163
9.2.2测试用于重定向到其他动作的动作 167
9.3 System.Web.Abstractions 170
9.4使用模拟的测试 171
9.5测试路由 173
9.6综合讨论 174
9.6.1分析传统的应用程序 174
9.6.2为了能够进行测试重构代码 175
9.6.3测试应用程序 178
9.7使用TDD方法的开发 185
9.7.1需求 185
9.7.2圣诞节的测试 185
9.7.3其他日期的测试 187
9.7.4新年日期的测试 188
9.7.5重构代码 189
9.8小结 190
9.9练习 191
第10章 组件 193
10.1不使用服务器控件的原因 193
10.2服务器控件 194
10.2.1简单的表单控件 195
10.2.2只进行呈现的组件 196
10.2.3绑定数据的控件 197
10.3使用局部视图 199
10.4编写自定义的HtmlHelper 205
10.5显示动作结果 209
10.6使用JavaScript编写客户端组件 211
10.7何时使用何种方法 211
10.8小结 212
10.9练习 212
第11章 动作过滤器 213
11.1动作过滤器的含义 213
11.2过滤器类型 214
11.3核心过滤器 215
11.3.1 HandleError过滤器 215
11.3.2 Authorize过滤器 218
11.3.3 ValidateInput过滤器 219
11.3.4 ValidateAntiForgery Token过滤器 219
11.3.5 OutputCache过滤器 219
11.4构建自定义动作过滤器 220
11.5控制器范围的过滤器 225
11.6过滤器执行顺序 226
11.7使用动作过滤器 229
11.7.1取消执行动作 229
11.7.2为视图添加更多数据 233
11.8小结 239
11.9练习 240
第12章AJAX 241
12.1 AJAX的含义 242
12.2 ASP.NET AJAX 243
12.3 jQuery 245
12.4 ASP.NET MVC中的AJAX 246
12.5 ASP.NET MVC应用程序中AJAX开发原则 249
12.6付诸行动:在ASP.NET MVC中使用AJAX 251
12.7小结 256
12.8练习 256
第13章 部署 257
13.1 ASP.NET部署概述 257
13.2 ASP.NET MVC驻留选项 258
13.2.1 GAC安装 259
13.2.2程序集部署 259
13.3驻留先决条件 259
13.4.NET安全策略 260
13.5 Web平台安装程序 261
13.6发布Web应用程序 265
13.7小结 267
第14章利用ASP.NET WebForms的功能 269
14.1高速缓存 270
14.1.1 ASP.NET中的高速缓存 270
14.1.2 ASP.NET MVC中的高速缓存 271
14.2验证 277
14.2.1 ASP.NET MVC中的验证 277
14.2.2使用模型状态的验证 278
14.3母版页 285
14.4其他功能 287
14.4.1站点地图 287
14.4.2配置文件系统 287
14.4.3运行状况监测 287
14.4.4服务器控件 288
14.5小结 288
14.6练习 288
第15章 身份验证与授权 289
15.1身份验证和授权的原则 290
15.2 ASP.NET中的身份验证和授权 290
15.2.1成员资格提供程序 291
15.2.2角色提供程序 292
15.3 ASP.NET MVC中的身份验证和授权 292
15.3.1配置应用程序以使用身份验证和授权 292
15.3.2定制成员资格和角色提供程序 297
15.3.3使用Authorize动作过滤器限制访问资源 297
15.3.4 ASP.NET MVC动作中的身份验证和授权 298
15.4小结 312
15.5练习 313
第16章 扩展ASP.NETMVC 315
16.1可扩展性简介 315
16.2可扩展性区域 316
16.3路由处理程序 316
16.3.1编写自定义路由处理程序 316
16.3.2通用的WebFormRouteHandler 319
16.4控制器工厂 320
16.4.1控制器工厂剖析 320
16.4.2使用Ninject定制控制器工厂 322
16.5视图引擎 326
16.5.1编写自定义视图引擎 326
16.5.2使用自定义视图引擎 331
16.5.3替代视图引擎 331
16.6次要扩展点 349
16.6.1 ActionMethodSelector-Attribute 349
16.6.2 TempDataProvider 350
16.6.3自定义ActionResult 351
16.7小结 353
16.8练习 354
第17章从ASP.NET WebForms迁移 355
17.1迁移的原因 355
17.2迁移过程概述 356
17.3 ASP.NET WebFonns与ASP.NETMVC的基本相似点 357
17.3.1身份验证和授权的相似点 358
17.3.2提供程序的相似点 358
17.3.3 HttpModule和HttpHandler 358
17.4 ASP.NET WebForms与ASP.NETMVC的根本区别 358
17.4.1 ViewState的区别 358
17.4.2服务器控件使用方面的区别 359
17.4.3编码模型方面的区别 359
17.4.4事件模型方面的区别 359
17.4.5 URL使用方面的区别 359
17.4.6资源分离方面的区别 360
17.4.7验证方面的区别 360
17.4.8 AJAX支持方面的区别 360
17.5在迁移到ASP.NET MVC的过程中替换控件 360
17.6小结 369
17.7练习 369
第18章 案例研究一 371
18.1 WroxBlog概述 372
18.2 WroxBlog的模型 373
18.2.1 WroxBlog的数据库结构 373
18.2.2 LINQ to SQL模型 374
18.2.3服务 375
18.3 WroxBlog控制器 382
18.3.1实现HomeController 382
18.3.2实现PostController 383
18.3.3实现CategoryController 385
18.4 WroxBlog视图 385
18.4.1站点母版页 386
18.4.2添加CategoriesControl控件 388
18.4.3添加PostControl控件 388
18.4.4添加PostsControl控件 389
18.4.5添加CommentControl控件 390
18.4.6添加CommentsControl控件 390
18.4.7添加CommentFormControl控件 391
18.4.8创建Home视图 392
18.4.9添加About视图 392
18.4.10创建IndividualPost视图 392
18.4.11创建Category Index视图 393
18.5 WroxBlog路由 393
18.6检查 395
18.7小结 397
18.8练习 398
第19章 案例研究二 399
19.1用户详情 399
19.2 WroxGallery外部库 400
19.3使用TDD方法 401
19.4构建WroxGallery模型 402
19.4.1创建数据模型 402
19.4.2实现WroxGallery服务 403
19.5 WroxGallery控制器 410
19.5.1 Home控制器 410
19.5.2 WroxGallery Account控制器 413
19.5.3构建Admin控制器 416
19.6配置IoCC 417
19.7创建WroxGallery视图 418
19.7.1创建母版页 419
19.7.2添加内容页面 422
19.8使用AJAX和jQue 424
19.8.1 Lightbox插件 424
19.8.2自动完成插件 424
19.9运行更多测试 425
19.10运行中的WroxGallery 429
19.11小结 431
19.12练习 431
附录A参考资料 433
附录B练习参考答案 435