本书是由台湾知名博客站长与畅销书作者“Will保哥”所撰写的ASP.NET MVC 4开发指南,融入作者多年实务开发工作之精髓,从基础观念、技术讲解、开发实例、开发技巧到安装部署,都将以深入浅出的例子带领读者理解ASP.NET MVC框架的精妙之处,让网站生成工作更加安全、快速,也更容易维护!
本书共分11章,第1章讲解通用的MVC特性,第2章讲述正确的开发观念,第3章以一个简单的例子带领读者快速上手ASP.NET MVC,第4~8章分别介绍了ASP.NET MVC最重要的核心观念与技术解析,其中包括路由与生命周期、模型、控制器、Razor视图引擎技术、本地技术等,第9章则以更高级的方式完成一套完整的电子商务网站开发实例,第10章分享笔者多年累积的各种开发技巧,第11章详述如何部署ASP.NET MVC到正式环境。
本书适合有ASP.NET窗体开发经验的开发人员阅读,书中的演示能清楚带领读者快速了解ASP.NET MVC的开发细节与观念,相信能为读者带来全新的视野,轻松排查网站开发过程中衍生的各种难题。
Will保哥作品,必属精品!啥也不说了,请搜索关键词“Will保哥”!
作 者 序
大家好,我是Will保哥,当前任职于台湾多奇数位创意有限公司,担任技术总监一职,负责公司技术方向的决策。大约从4年多前我开始注意到,ASP.NET MVC这门技术在国外渐渐发展起来,起初不觉得有什么特别的地方,但慢慢地看到了一些国外讨论的开发观念与设计样式,好像真的能够解决当时ASP.NET Web Form开发上的困扰点,例如,内建的控件不好用、控件套版不易、抽象的ASP.NET Web Form事件模型常常让开发人员搞不清楚状况、太大的ViewState等,这些都是我们日常开发工作会遇到的问题。
直到2009年初,ASP.NET MVC 1.0正式版上市,除了还在创建与维护中的ASP.NET Web Form项目不会改动之外,我毅然决然地带领公司所有开发人员转向ASP.NET MVC的怀抱,并宣告未来所有新项目皆以ASP.NET MVC技术为主。这是一个重大的决定,也是一个至今从未后悔的决定。对我来说,学习一门全新的技术时,动机”很重要,而且当你接触一门新技术必须要放弃许多以往的开发经验时,如果没有明确的动机与察觉转变的价值,很难让人改变,因此要进入一个全新技术的领域,首要任务就是先感受技术的价值,然后再进一步深入研究技术的细节。
这本书是《ASP.NET MVC 2 开发实战》这本书的火力加强版,两年多前写人生第一本书时,从决定要写,到写完历时一年多的时间,并且当时ASP.NET MVC版本也从ASP.NET MVC 1.0升级到ASP.NET MVC 2.0,由于ASP.NET MVC的观念与架构十分优秀与严谨,因此技术升级的过程非常顺利,也因为ASP.NET MVC的开发观念不需要重新创建,所以当时在学习ASP.NET MVC 2.0的时候也没什么太多负担。
时至今日,ASP.NET MVC又升级了两版,来到当前最新的ASP.NET MVC 4.0版,如同我两年前的预测一样,新的ASP.NET MVC 3.0与ASP.NET MVC 4.0与早期ASP.NET MVC 1.0与ASP.NET MVC 2.0的兼容性都非常好,其开发观念也都完全一致,对于早期投入ASP.NET MVC研究的人来说,并不会带来多大学习压力,只要另外学习新版带来的新功能与新特性即可。
新版的ASP.NET MVC 3.0与ASP.NET MVC 4.0也如大家所预期的,微软持续不断地在ASP.NET MVC架构上增强功能,并且不断地强化Visual Studio工具的支持,例如,当前最新版的Visual Studio 2012的Page Inspector功能,就能帮助ASP.NET MVC开发人员在不同的View之间快速切换,开发除错的效率大幅提升,因此,笔者依然认为ASP.NET MVC在未来还是非常具有发展前景。
这些年来,我们公司已经全面转型使用ASP.NET MVC开发各种大大小小的项目,现在创建的网站不但更加安全、开发速度更快、项目创建完成的时间更短,以及最重要的是网站变得更容易维护,质量也更高了,这都要归功于ASP.NET MVC的技术架构所赐,因为ASP.NET MVC非常强调“关注点分离”的概念,而且从开发架构上来看就很容易让开发人员做到“关注点分离”,这个优势是ASP.NET Web Form完全无法匹敌的。有趣的是,当我问公司里的工程师:“你以后还想要写ASP.NET WebForm吗?”他给我的回答竟然是:“保哥,我回不去了。”
笔者整理这几年累积的ASP.NET MVC开发经验与教学经验,希望本书的出版能带给所有ASP.NET开发人员另一个全新且优秀的选择,就让我们一起拥抱ASP.NET MVC的世界吧!
黄保翕( Will保哥)
多奇数位创意有限公司:http://www.miniasp.com/
我的博客:http://blog.miniasp.com/
The Will Will Web-记载着Will在网络世界的学习心得与技术分享
Will保哥的新浪微博:http://www.weibo.com/cnwill
本书源码下载:
https://dl.dropboxusercontent.com/u/1011445/MVC4SampleCode.zip
ASP.NET MVC问世已久,几年前或许有人会担心ASP.NET MVC框架是否能用在实务的项目上,也担心用在新项目上是否真的能改善开发效率与质量,但笔者这几年下来,已经累积数十个网站项目改用ASP.NET MVC框架来开发,不但运作得十分顺畅,而且也能让完全不懂ASP.NET MVC的新手迅速理解核心观念与开发架构,相信只要读者拥有正确的观念、学习关键的核心技术,很快就能活用在工作与项目上。
本书主要分成三大部分,将以循序渐进的方式,带领读者揭开ASP.NET MVC 4的神秘面纱,引导读者创建正确的观念,以及实际体验ASP.NET MVC 4的强大魅力。
TIPS建议章节阅读顺序:
1 → 2 → 3想按部就班学习ASP.NET MVC的人
1 → 3 → 2想先感受程序,再创建观念的人
3 → 1 → 2给懒得阅读文字,只想看程序代码的人
第1篇:基础观念篇
第1章:在学习ASP.NET MVC之前
本章将介绍ASP.NET MVC的基础知识,帮助你了解ASP.NET MVC的轮廓。由于着重于观念,如果觉得看不懂,可先直接跳过,待后续的章节读完之后,再回头阅读或许更能帮助你创建正确的观念。
第2章:创建正确的开发观念
主要介绍使用ASP.NET MVC进行网站开发时应有的正确观念。强大的工具若没有正确的观念支持,就像是给你一台马力强又省油的手排车,而你不知道离合器如何使用是一样的,也许你试了一段时间后,觉得车子还是开不快时,就提前放弃了一部好车。本章最后也整理了初学者对ASP.NET MVC经常会问的问题,并逐一进行回答。
第3章:新手上路初体验
将介绍Visual Studio 2012开发环境与操作技巧,并利用Visual Studio 2012创建你的第一个ASP.NET MVC专案,让读者亲身体验ASP.NET MVC在进行实务开发时的完整过程,相信在逐步教学的带领之下能让现有的ASP.NET Web Form开发人员迅速了解与ASP.NET MVC的开发差异,进而快速上手。
第2篇:技术讲解篇
第4章:Routing与ASP.NET MVC生命周期
要想掌握ASP.NET MVC,最重要的是要了解网址路由(Routing)与运行生命周期的重要观念。网址路由在ASP.NET MVC有两个目的,第一个是比对通过浏览器传来的HTTP要求,并映射到适当的Controller与Action进行处理;另一个目的则是决定ASP.NET MVC应该输出什么样的网址响应给浏览器。虽然跳过本章仍然可以成功创建ASP.NET MVC网站,但了解它能帮助我们理解ASP.NET MVC运行时的先后顺序,进而减少犯错的机会。
第5章:Model相关技术
在ASP.NET MVC开发的过程中,通常Model(模型)是整个项目首要开发的部分,所有需要数据访问的地方都需仰赖Model提供服务。本章将从最基本的ORM观念讲起,介绍Visual Studio 2012内建的SQL Server 2012 Express LocalDB数据库,以及学习如何使用Entity Framework Code First快速创建数据模型,并利用Code First数据库迁移功能简化数据库操作的复杂度。最后还会介绍如何手动创建检视数据模型(ViewModel),并通过部分类别的扩充达到基本的字段验证。
第6章:剖析Controller相关技术
ASP.NET MVC的核心就是Controller (控制器),负责处理浏览器传来的所有要求,并决定响应的属性,但Controller并不负责应如何显示属性,仅响应特定形态的属性给ASP.NET MVC框架,而View才是决定响应属性的重要角色。本章也将会应用第2章所提及的“关注点分离”、“以习惯替换配置”、“不要重复你自己”等观念,让你迈入ASP.NET MVC的殿堂,从而发现ASP.NET MVC的核心之美。
第7章:View数据呈现相关技术
View负责数据的呈现,所有呈现数据的逻辑都会由View来控制管理,不过,View开发应该是整个ASP.NET MVC项目最费时间的,因为与显示逻辑相关的技术五花八门,本章将会介绍众多ASP.NET MVC内建的View开发技术,以迅速解决各种复杂的开发情境。此外,从ASP.NET MVC 3开始新增的Razor语法,是一种有别于常规ASP.NET Web Form的全新撰写风格,在本章也会详加阐述所有细节,让读者在最短的时间内学会这个崭新、优异的Razor语法。
第8章:Area区域相关技术
本章将介绍如何利用ASP.NET MVC的Area(区域)机制,协助你架构较为大型的项目,让独立性高的功能独立成一个ASP.NET MVC子网站,以降低网站与网站之间的耦合性,也可以通过Area的切割让多人同时开发同一个项目时,减少互相冲突的机会。
第3篇:开发实战篇
第9章:高级实战:电子商务网站开发
本章将通过第2篇所学到的知识,以一套完整的电子商务网站为蓝图,详述ASP.NET MVC 4开发流程与分享许多实务开发技巧,从数据模型规划、控制器架构规划、创建检视页面、添加数据库功能与购物车功能,最后再介绍如何强化现有ASP.NET MVC项目与信息分页技巧,相信在融会贯通之后,即可有效运用于其他更复杂的项目上。
第10章:ASP.NET MVC开发技巧
本章将整理一些在实务上经常使用的开发技巧。包括强化网站安全性、多国语言支持、使用Visual Studio程序代码模板快速开发、如何在ASP.NET MVC与ASP.NET Web Form之间传递数据、如何对ASP.NET MVC 4源代码进行调试、使用Visual Studio程序代码模板快速开发等。虽然善用工具能有效提升开发效率,但还是要记得,拥有正确的观念与扎实的技术,才是开发效率提升的不二法门。
第11章:安装部署
部署网站往往是一件麻烦事,因为在安装部署的过程中,经常有许多步骤要运行,对于许多不太熟悉IIS/SQL的新手来说,部署网站变成一件非常困难且危险的事。Visual Studio 2012在ASP.NET网站部署方面提升了不少能力,有助于让你将现有网站快速且简便地发布到远程的IIS服务器上,而免除了许多繁杂的设置程序。此外还整理了几个部署ASP.NET MVC的常见问题,当遇到问题时可供读者进行参考。
黄保翕(Will保哥)
网络知名技术专家(个人博客TheWill Will Web记载着Will在网络世界的学习心得与技术分享)。当前已经超过千篇文章。
台科大电子工程系毕业,现任多奇数位创意有限公司技术总监,自身专攻Web开发已经超过15年,早期专研LAMP相关技术,近几年全心转移技术领域至Microsoft.NET Platform与ASP.NET开发技术。曾担任 Visual Studio2010 上市发表会讲师、MSDN讲座讲师、TechDays Taiwan 2010/2011 讲师、TechEd China2011 讲师,出版著作有《ASP.NETMVC 2 开发实战》与《WindowsPhone开发实战》等。
擅长各式Web排查方案、中大型网站架构规划、数据库系统设计、网站属性管理系统、网络系统与Web集成。
微软最有价值专家(MVP),拥有MCTS、MCPD等国际认证。
黄保翕(Will保哥)
网络知名技术专家(个人博客TheWill Will Web记载着Will在网络世界的学习心得与技术分享)。当前已经超过千篇文章。
台科大电子工程系毕业,现任多奇数位创意有限公司技术总监,自身专攻Web开发已经超过15年,早期专研LAMP相关技术,近几年全心转移技术领域至Microsoft.NET Platform与ASP.NET开发技术。曾担任 Visual Studio2010 上市发表会讲师、MSDN讲座讲师、TechDays Taiwan 2010/2011 讲师、TechEd China2011 讲师,出版著作有《ASP.NETMVC 2 开发实战》与《WindowsPhone开发实战》等。
擅长各式Web排查方案、中大型网站架构规划、数据库系统设计、网站属性管理系统、网络系统与Web集成。
微软最有价值专家(MVP),拥有MCTS、MCPD等国际认证。
第1章 在学习ASP.NETMVC之前
1.1 何谓MVC
1.1.1 何谓Model
1.1.2 何谓View
1.1.3 何谓Controller
1.2 初探MVC架构
1.2.1 彼此的关联性
1.2.2 Controller与View的关联性
1.2.3 View与Model的关联性
1.2.4 Model与Controller的关联性
1.3 彼此的独立性
1.3.1 Controller与View之间的独立性
1.3.2 View与Model之间的独立性
1.3.3 Model与Controller之间的独立性
1.4 为什么要ASP.NET MVC
第1章 在学习ASP.NETMVC之前
1.1 何谓MVC
1.1.1 何谓Model
1.1.2 何谓View
1.1.3 何谓Controller
1.2 初探MVC架构
1.2.1 彼此的关联性
1.2.2 Controller与View的关联性
1.2.3 View与Model的关联性
1.2.4 Model与Controller的关联性
1.3 彼此的独立性
1.3.1 Controller与View之间的独立性
1.3.2 View与Model之间的独立性
1.3.3 Model与Controller之间的独立性
1.4 为什么要ASP.NET MVC
1.4.1 关注点分离与可维护性
1.4.2 开放特性与社群支持
1.4.3 开发工具与效率
1.4.4 易于测试的架构
1.4.5 易于分工的架构
1.5 总结
第2章 创建正确的开发观念
2.1 关注点分离
2.2 以习惯替换配置
2.2.1 Controller
2.2.2 View
2.2.3 Model
2.3 开发ASP.NET MVC项目时的建议
2.4 ASP.NET MVC常见问题
2.5 总结
第3章 新手上路初体验
3.1 认识Visual Studio
开发工具
3.2 介绍Nu Get套件管理员
3.2.1 遭遇问题
3.2.2 使用方法
3.2.3 开启程序包管理器控制台(Package Manager Console)
3.2.4 启用Nu Get套件还原
3.3 创建第一个ASP.NET MVC专案
3.3.1 利用ASP.NET MVC项目模板创建项目
3.3.2 创建数据模型
3.3.3 创建控制器、动作与检视
3.3.4 测试当前创建好的留言板网页
3.3.5 查看数据库属性
3.3.6 了解自动生成的程序代码
3.3.7 调整前台让用户留言的版面
3.4 学习MVC的注意事项
3.4.1 了解不同的项目类型
3.4.2 初学者常犯的错误
3.4.3 小心使用Request与Response对象
3.4.4 不要在检视中撰写过多的程序逻辑
3.5 总结
第2篇 技术讲解篇
第4章 Routing与ASP.NET MVC
生命周期
4.1 Routing——网址路由
4.1.1 比对通过浏览器传来的HTTP要求
4.1.2 响应适当的网址给浏览器
4.1.3 默认网址路由属性解说
4.2 HTTP要求的URL如何对应网址路由
4.2.1 网址路由演示
4.2.2 替网址路由加上路由值的条件约束
4.3 网址路由如何在ASP.NET MVC中生成网址
4.4 ASP.NETMVC的运行生命周期
4.4.1 网址路由比对
4.4.2 运行Controller与Action
4.4.3 运行View并回传结果
4.5 总结
第5章 Model相关技术
5.1 关于Model的责任
5.2 开发Model的基本观念
5.2.1 何谓ORM
5.2.2 数据库开发模式
5.3 Local DB介绍
5.3.1 Local DB的运作方式
5.3.2 如何连接Local DB实例
5.3.3 管理Local DB自动实例
5.3.4 管理Local DB具名实例
5.4 使用Code First创建数据模型
5.4.1 创建数据模型
5.4.2 创建数据上下文类
5.4.3 设计模型之间的关联性
5.4.4 启用延迟装入特性
5.5 使用Code First数据库迁移
5.5.1 EF Code First如何记录版本
5.5.2 启用数据库迁移
5.5.3 运行数据库迁移
5.5.4 自定义数据库迁移规则
5.5.5 自动数据库迁移
5.5.6 如何避免数据库被自动创建或自动迁移
5.6 使用View Model数据检视模型
5.7 扩充数据模型
5.7.1 定义数据模型的Metadata
5.7.2 自定义Metadata验证属性
5.7.3 ASP.NET MVC3新增的验证属性
5.7.4 Entity Framework新增的验证属性
5.7.5 .NET4.5新增的验证属性
5.8 总结
第6章 Controller相关技术
6.1 关于Controller的责任
6.2 Controller的类别与方法
6.3 Controller的运行过程
6.3.1 找不到Action时的处理方式
6.3.2 动作名称选定器
6.4 动作方法选定器
6.4.1 Non Action属性
6.4.2 HTTP动词限定属性
6.5 Action Result解说
6.5.1 View Result
6.5.2 Partial View Result
6.5.3 Empty Result
6.5.4 Content Result
6.5.5 File Result
6.5.6 JavaScript Result
6.5.7 Json Result
6.5.8 Redirect Result
6.5.9 Redirect To Route
6.5.10 Http Status Code Result
6.5.11 Http Not Found Result
6.5.12 Http Unauthorized Result
6.6 View Data、View Bag与Temp Data概述
6.6.1 View Data
6.6.2 View Data. Model
6.6.3 View Bag
6.6.4 Temp Data
6.7 模型绑定
6.7.1 简单模型绑定
6.7.2 使用Form Collection取得窗体信息
6.7.3 复杂模型绑定
6.7.4 多个复杂模型绑定
6.7.5 判断模型绑定的验证结果
6.7.6 模型绑定验证失败的错误详细信息
6.7.7 清空模型绑定状态
6.7.8 使用Bind属性限制可被更新的数据模型属性
6.7.9 使用Update Model与Try Update Model
6.8 动作过滤器
6.8.1 授权过滤器属性
6.8.2 动作过滤器属性
6.8.3 结果过滤器属性
6.8.4 例外过滤器属性
6.8.5 自定义动作过滤器属性
6.9 总结
第7章 View数据呈现相关技术
7.1 关于View的责任
7.2 了解Razor语法
7.2.1 Razor基本语法
7.2.2 Razor与HTML混合输出
7.2.3 Razor与HTML混合输出陷阱与技巧
7.2.4 Razor与ASPX语法比较
7.2.5 Razor的主版页面框架
7.2.6 @helper辅助方法
7.2.7 @functions自定义函数
7.2.8 @model引用参考资料型别
7.2.9 @using引用命名空间
7.3 View如何从Action取得数据
7.3.1 使用弱型别模型取得数据
7.3.2 使用强型别模型取得数据
7.4 HTML辅助方法
7.4.1 使用HTML辅助方法输出超链接