编辑推荐
来自.NET专家的指南
在微软平台上构建可维护、与标准兼容且运行的Web应用
ASP.NETMVC5框架是微软ASP.NETWeb平台的新进展。它提供了高生产率的编程模型,结合ASP.NET的全部优势,使代码架构更整洁,可进行测试驱动开发,并使程序有强大的可扩展性。
通过《精通 ASP.NET MVC 5》你将学到:
获得对ASP.NETMVC5体系构架的完整理解
了解第ASP.NETMVC5的新特性以及如何将这些新特性运用于开发
了解MVC及测试驱动开发的实际运作
充分利用已有的知识快速而方便地将传统的ASP.NET与ASP.NETMVC5的特性进行比较
《精通 ASP.NET MVC 5》讲解了ASP.NETMVC5的所有特点,包括用C#属性定义路由以及重写过滤器的技术等,构建MVC应用程序的用户体验也有本质上的改进。《精通 ASP.NET MVC 5》还涉及流行的BootstrapJavaScript库,该库现已被纳入到MVC5之中,为开发人员提供更广泛的多平台CSS和HTML5选项,而不必像以前那样去加载大量的第三方库。内容简介
ASP.NETMVC5框架是微软ASP.NETWeb平台的新进展。它提供了高生产率的编程模型,结合ASP.NET的全部优势,促成更整洁的代码架构、测试驱动开发和强大的可扩展性。
《精通 ASP.NET MVC 5》涵盖ASP.NETMVC5的所有开发优势技术,包括用C#属性定义路由技术及重写过滤器技术等。且构建MVC应用程序的用户体验也有本质上的改进。其中书里也专一讲解了用新VisualStudio2013创建MVC应用程序时的技术和技巧。《精通 ASP.NET MVC 5》包括完整的开发工具介绍以及对代码进行辅助编译和调试的技术。
《精通 ASP.NET MVC 5》还涉及流行的BootstrapJavaScript库,该库现已被纳入到MVC5之中,为开发人员提供更广泛的多平台CSS和HTML5选项,而不必像以前那样去加载大量的第三方库。
《精通 ASP.NET MVC 5》适合程序员、Web开发者学习,也适合作为大中专院校相关专业的师生用书和培训学校的教材。作者简介
李萍,盐城工学院教师,硕士,长期从事计算机专业的教学与科研工作,是印度NIIT双语教学认证教师。主要研究领域:大型Web数据库应用与设计、计算机应用与开发。承担了《精通 ASP.NET MVC 5》全部译文的校对与文字修订工作。目录
第1章ASP.NETMVC背景1
1.1理解ASP.NET历史1
1.2当今的Web开发3
1.2.1Web标准与REST3
1.2.2敏捷与测试驱动开发3
1.2.3RubyonRails4
1.2.4Node.js4
1.3ASP.NETMVC的关键优点5
1.3.1MVC的体系结构5
1.3.2可扩展性5
1.3.3HTML和HTTP上的严密控制6
1.3.4可测试性6
1.3.5强大的路由系统7
1.3.6建立在ASP.NET平台的精华之上7
1.3.7现代API7
1.3.8ASP.NETMVC是开源的8
1.4《精通 ASP.NET MVC 5》的预备知识8
1.5《精通 ASP.NET MVC 5》的结构8
1.5.1第1部分:ASP.NETMVC5导论8
1.5.2第2部分:ASP.NETMVC细节8
1.6本版的新特点9
1.7获取示例代码9
1.8《精通 ASP.NET MVC 5》所需的软件10
1.9诚信10
1.10小结10
第2章第一个MVC应用程序11
2.1准备VisualStudio11
2.2创建新的ASP.NETMVC项目11
2.2.1添加第一个控制器13
2.2.2理解路由16
2.3渲染Web页面16
2.3.1创建并渲染视图16
2.3.2添加动态输出20
2.4创建一个简单的数据录入应用程序21
2.4.1设置场景21
2.4.2设计一个数据模型22
2.4.3链接动作方法23
2.4.4建立表单25
2.4.5设置启动URL27
2.4.6处理表单28
2.4.7添加验证31
2.4.8设置内容样式35
2.4.9完成示例40
2.5小结41
第3章MVC模式42
3.1MVC简史42
3.2理解MVC模式42
3.2.1理解域模型43
3.2.2MVC的ASP.NET实现44
3.2.3MVC与其他模式比较44
3.3建立松耦合组件47
3.3.1使用依赖项注入48
3.3.2使用依赖项注入容器49
3.4自动测试初步50
3.4.1理解单元测试51
3.4.2理解集成测试55
3.5小结56
第4章基本语言特性57
4.1准备示例项目57
4.2使用自动实现的属性59
4.3使用对象与集合的初始化器62
4.4使用扩展方法64
4.4.1对接口运用扩展方法65
4.4.2创建过滤扩展方法67
4.5使用lambda表达式69
4.6使用自动类型接口72
4.7使用匿名类型72
4.8执行语言集成查询(LINQ)74
4.9使用Async方法78
4.10小结81
第5章使用Razor82
5.1准备示例项目82
5.1.1定义模型82
5.1.2定义控制器83
5.1.3创建视图83
5.2使用模型对象84
5.3使用布局86
5.3.1创建布局86
5.3.2运用布局88
5.3.3使用视图起始文件88
5.3.4演示共享布局89
5.4使用Razor表达式92
5.4.1插入数据值93
5.4.2设置标签属性的值94
5.4.3使用条件语句96
5.4.4枚举数组和集合98
5.4.5处理命名空间99
5.5小结100
第6章MVC基本工具101
6.1准备示例项目102
6.1.1创建模型类102
6.1.2添加控制器103
6.1.3添加视图104
6.2使用Ninject104
6.2.1理解问题105
6.2.2将Ninject添加到VisualStudio项目106
6.2.3Ninject初步107
6.2.4建立MVC的依赖项注入108
6.2.5创建依赖项链111
6.2.6指定属性和构造器参数值112
6.2.7使用条件绑定114
6.2.8设置对象作用域115
6.3VisualStudio的单元测试117
6.3.1创建单元测试项目117
6.3.2添加单元测试119
6.3.3运行单元测试(并失败)122
6.3.4实现特性123
6.3.5测试并修正代码123
6.4使用Moq库124
6.4.1理解问题125
6.4.2将Moq添加到VisualStudio项目126
6.4.3对单元测试添加模仿对象126
6.4.4创建更复杂的模仿对象129
6.5小结131
第7章SportsStore:一个真正的应用程序132
7.1开始133
7.1.1创建VisualStudio解决方案和项目133
7.1.2安装工具包134
7.1.3添加项目之间的引用135
7.1.4设置DI容器135
7.1.5运行应用程序136
7.2从域模型开始137
7.2.1创建抽象存储库137
7.2.2创建模仿存储库138
7.3显示产品列表139
7.3.1添加控制器139
7.3.2添加布局、视图起始文件及视图140
7.3.3设置默认路由142
7.3.4运行应用程序143
7.4准备数据库143
7.4.1创建数据库144
7.4.2定义数据库方案145
7.4.3向数据库添加数据147
7.4.4创建EntityFramework上下文148
7.4.5创建Product存储库149
7.5添加分页151
7.5.1显示页面链接152
7.5.2改进URL160
7.6设置内容样式161
7.6.1安装Bootstrap包161
7.6.2在布局中运用Bootstrap样式162
7.6.3创建分部视图163
7.7小结165
第8章SportsStore:导航166
8.1添加导航控件166
8.1.1过滤产品列表166
8.1.2调整URL方案170
8.1.3建立分类导航菜单172
8.1.4修正页面计数178
8.2创建购物车180
8.2.1定义购物车实体180
8.2.2添加“加入购物车”按钮184
8.2.3实现购物车控制器185
8.2.4显示购物车内容186
8.3小结188
第9章SportsStore:完成购物车189
9.1使用模型绑定189
9.2完成购物车功能193
9.2.1删除购物车物品194
9.2.2添加购物车摘要195
9.3递交订单197
9.3.1扩充域模型197
9.3.2添加结算过程198
9.3.3实现订单处理器203
9.3.4注册接口实现206
9.3.5完成购物车控制器207
9.3.6显示验证错误210
9.3.7显示致谢页面212
9.4小结212
第10章SportsStore:移动版213
10.1移动Web开发的背景213
10.2使用响应式设计214
10.2.1创建响应式页头215
10.2.2创建响应式的产品列表218
10.3创建移动专用的内容225
10.3.1创建移动布局225
10.3.2创建移动视图226
10.4小结229
第11章SportsStore:管理230
11.1添加分类管理230
11.1.1创建CRUD控制器230
11.1.2创建新的布局232
11.1.3实现List视图233
11.1.4编辑产品236
11.1.5创建新产品248
11.1.6删除产品251
11.2小结253
第12章SportsStore:安全性与收尾工作254
12.1实现管理控制器的安全254
12.1.1创建基本的安全策略254
12.1.2运用过滤器进行授权256
12.1.3创建认证提供器257
12.1.4创建Account控制器259
12.1.5创建视图260
12.2图像上传263
12.2.1扩展数据库263
12.2.2增强域模型263
12.2.3创建上传用户界面的元素264
12.2.4将图像保存到数据库266
12.2.5实现GetImage动作方法268
12.2.6显示产品图像270
第13章部署272
13.1WindowsAzure的准备273
13.1.1创建Web网站和数据库273
13.1.2准备远程管理数据库275
13.1.3创建数据库模式275
13.2部署应用程序278
13.3小结280
第14章MVC项目综述281
14.1使用VisualStudio的MVC项目281
14.1.1创建项目281
14.1.2理解MVC约定284
14.2调试MVC应用程序286
14.2.1准备示例项目286
14.2.2运行VisualStudio调试器288
14.2.3引发VisualStudio调试器中断290
14.2.4使用编辑并继续293
14.3使用浏览器链接296
14.4小结297
第15章URL路由298
15.1创建示例项目299
15.1.1创建示例控制器299
15.1.2创建视图300
15.1.3设置起始URL并测试应用程序301
15.2URL模式301
15.3创建并注册一条简单路由303
15.4定义默认值308
15.5使用静态URL片段310
15.6定义自定义片段变量313
15.6.1用自定义变量作为动作方法参数315
15.6.2定义可选URL片段316
15.6.3定义可变长路由318
15.6.4按命名空间区分控制器优先顺序319
15.7约束路由322
15.7.1用正则表达式约束路由322
15.7.2将一条路由约束到一组指定的值323
15.7.3使用HTTP方法约束路由324
15.7.4定义自定义约束327
15.8使用属性路由329
15.8.1启用和运用属性路由329
15.8.2使用片段变量创建路由331
15.8.3运用路由约束332
15.8.4使用RoutePrefix333
15.9小结334
第16章高级路由特性335
16.1准备示例项目335
16.1.1简化路由336
16.1.2添加优化包336
16.1.3更新单元测试项目336
16.2在视图中生成输出URL337
16.2.1用路由系统生成输出URL337
16.2.2以其他控制器为目标339
16.2.3传递额外的值341
16.2.4指定HTML标签属性343
16.2.5生成链接中的全限定URL343
16.2.6生成URL(而不是链接)344
16.2.7在动作方法中生成输出URL345
16.2.8根据指定路由生成URL346
16.3定制路由系统347
16.3.1创建自定义的RouteBase实现347
16.3.2创建自定义路由处理程序352
16.4使用区域353
16.4.1创建一个区域353
16.4.2填充区域355
16.4.3解析不明确的控制器问题356
16.4.4使用属性创建区域357
16.4.5生成对区域动作的链接358
16.5对磁盘文件进行路由请求359
16.5.1配置应用程序服务器360
16.5.2为磁盘文件定义路由361
16.6绕过路由系统362
16.7URL方案最佳做法363
16.7.1使URL整洁和人性化363
16.7.2GET和POST:选用正确的一个364
16.8小结364
第17章控制器和动作365
17.1准备示例项目365
17.2控制器介绍366
17.2.1使用IController创建控制器366
17.2.2创建派生于Controller类的控制器368
17.3接收请求数据370
17.3.1通过上下文对象获取数据370
17.3.2使用动作方法参数371
17.4产生输出373
17.4.1理解动作结果375
17.4.2通过渲染视图返回HTML378
17.4.3将数据从动作方法传递给视图381
17.4.4执行重定向385
17.4.5返回错误及HTTP代码389
17.5小结391
第18章过滤器392
18.1准备示例项目392
18.2使用过滤器394
18.2.1过滤器类型介绍396
18.2.2将过滤器运用于控制器和动作方法396
18.3使用授权过滤器397
18.3.1运用自定义授权过滤器399
18.3.2使用内建的授权过滤器399
18.4使用认证过滤器400
18.4.1理解IAuthenticationFilter接口400
18.4.2实现认证检查402
18.4.3组合认证和授权过滤器404
18.4.4处理最终有疑问的请求405
18.5使用异常过滤器406
18.5.1创建异常过滤器406
18.5.2运用异常过滤器407
18.5.3使用视图来响应异常409
18.5.4使用内建的异常过滤器411
18.6使用动作过滤器414
18.6.1实现OnActionExecuting方法414
18.6.2实现OnActionExecuted方法416
18.7使用结果过滤器417
18.8使用其他过滤器特性420
18.8.1无注解属性的过滤420
18.8.2使用全局过滤器422
18.8.3对过滤器执行进行排序424
18.8.4重载过滤器426
18.9小结428
第19章控制器可扩展性429
19.1准备示例项目430
19.2创建自定义控制器工厂431
19.2.1处理备用控制器433
19.2.2实例化控制器类434
19.2.3实现其他接口方法434
19.2.4注册自定义控制器工厂435
19.3使用内建的控制器工厂435
19.3.1命名空间优先排序436
19.3.2定制DefaultControllerFactory的控制器实例化437
19.4创建自定义动作调用器439
19.5使用内建的动作调用器441
19.5.1使用自定义动作名441
19.5.2使用动作方法选择443
19.6用特殊控制器改善性能447
19.6.1使用无会话控制器448
19.6.2使用异步控制器450
19.7小结454
第20章视图455
20.1创建自定义视图引擎455
20.1.1准备示例项目458
20.1.2创建自定义的IView458
20.1.3创建IViewEngine实现459
20.1.4注册自定义视图引擎460
20.1.5测试视图引擎461
20.2使用Razor引擎462
20.2.1准备示例项目462
20.2.2理解Razor视图渲染463
20.2.3配置视图搜索位置464
20.3对Razor视图添加动态内容467
20.3.1使用分段467
20.3.2使用分部视图472
20.3.3使用子动作474
20.4小结476
第21章辅助器方法477
21.1准备示例项目477
21.1.1设置启动URL478
21.1.2测试示例应用程序478
21.2创建自定义辅助器方法479
21.2.1创建内联的辅助器方法479
21.2.2创建外部辅助器方法481
21.2.3管理辅助器方法中的字符串编码484
21.3使用内建的Form辅助器方法487
21.3.1创建Form元素487
21.3.2指定表单使用的路由493
21.3.3使用输入辅助器495
21.3.4创建Select元素499
21.4小结501
第22章模板辅助器方法502
22.1准备示例项目502
22.2使用模板辅助器方法504
22.2.1生成标签和显示元素508
22.2.2使用整体模型模板辅助器510
22.3使用模型元数据512
22.3.1用元数据控制编辑及可见性512
22.3.2使用用于标签的元数据514
22.3.3使用用于数据值的元数据515
22.3.4用元数据选择显示模板517
22.3.5将元数据运用于伙伴类518
22.3.6使用复合类型属性520
22.4定制模板视图辅助器系统521
22.4.1创建自定义编辑器模板521
22.4.2创建泛型模板522
22.4.3替换内建模板524
22.5小结524
第23章URL和Ajax辅助器方法525
23.1准备示例项目525
23.1.1定义附加的CSS样式526
23.1.2安装NuGet包527
23.2创建基本的链接和URL527
23.3使用MVC的渐进式Ajax529
23.3.1创建同步表单视图529
23.3.2为渐进式Ajax准备项目531
23.4创建渐进式Ajax表单532
23.4.1准备控制器532
23.4.2创建Ajax表单534
23.4.3理解渐进式Ajax工作原理535
23.5设置Ajax选项536
23.5.1确保优雅降级536
23.5.2在Ajax请求期间给用户提供反馈538
23.5.3请求之前对用户进行提示539
23.6创建Ajax链接539
23.7使用Ajax回调541
23.8使用JSON543
23.8.1对控制器添加JSON支持544
23.8.2在浏览器中处理JSON545
23.8.3准备编码数据547
23.8.4在动作方法中检测Ajax请求548
23.9小结550
第24章模型绑定551
24.1准备示例项目551
24.2理解模型绑定553
24.3使用默认模型绑定器555
24.3.1绑定简单类型556
24.3.2绑定复杂类型558
24.3.3绑定到数组和集合564
24.4手工调用模型绑定569
24.5定制模型绑定系统571
24.5.1创建自定义值提供器571
24.5.2创建自定义模型绑定器574
24.5.3注册自定义模型绑定器576
24.6小结577
第25章模型验证578
25.1准备示例项目578
25.1.1创建布局579
25.1.2创建视图580
25.2明确地验证模型581
25.3显示验证消息584
25.4使用其他验证技术588
25.4.1在模型绑定器内实施验证588
25.4.2用元数据指定验证规则589
25.4.3定义自验证模型595
25.5执行客户端验证596
25.5.1启用客户端验证597
25.5.2使用客户端验证598
25.5.3理解客户端验证机制599
25.6执行远程验证600
25.7小结603
第26章捆绑包604
26.1准备示例应用程序604
26.1.1添加NuGet包604
26.1.2创建模型和控制器604
26.1.3创建布局和视图605
26.2脚本及样式表加载的资料分析608
26.3使用脚本和样式捆绑包610
26.3.1添加NuGet包610
26.3.2定义捆绑包610
26.3.3运用捆绑包612
26.3.4优化JavaScript和CSS文件614
26.4小结615
第27章WebAPI与单页应用程序616
27.1理解单页应用程序616
27.2准备示例项目617
27.2.1创建模型617
27.2.2添加NuGet包619
27.2.3添加控制器619
27.2.4添加布局和视图620
27.2.5设置启动位置并测试示例应用程序622
27.3使用WebAPI623
27.3.1创建WebAPI控制器624
27.3.2测试API控制器624
27.4理解API控制器的工作机制626
27.4.1理解API控制器的动作选择627
27.4.2将HTTP方法映射到动作方法628
27.5将Knockout用于单页应用程序629
27.5.1在布局中添加JavaScript库629
27.5.2实现Summary630
27.5.3改善Delete特性635
27.5.4实现Create特性636
27.6完成应用程序639
27.6.1简化Home控制器639
27.6.2管理内容的可见性640
27.7小结642