标题：ASP.NET MVC 2开发实战
基本信息
作者： 黄保翕（Will保哥）    陈酉玫    李杨    
出版社：电子工业出版社 
ISBN：9787121127885
上架时间：2011-3-7
出版日期：2011 年3月
开本：16开
页码：1
版次：1-1
内容简介
《asp.net mvc 2开发实战》以循序渐进的方式揭开asp.net mvc的神秘面纱，帮助开发人员将现有的asp.net web forms项目转移到asp.net mvc架构，引导读者建立正确的开发观念，并搭配visual studio 2010开发工具，带领读者体验asp.net mvc的强大魅力。
《asp.net mvc 2开发实战》主要分成3篇。基础观念篇介绍了开发人员在学习asp.net mvc之前需要了解的技术和观念，以及mvc架构的基础知识。技术讲解篇针对asp.net mvc 2的各项开发技术进行解析，以帮助开发人员解决实际问题。开发实践篇通过一套完整的留言板系统案例详述asp.net mvc 2的开发技巧与流程，以及asp.net mvc的安装部署和单元测试方法。
《asp.net mvc 2开发实战》适合对mvc架构感兴趣的asp.net开发人员阅读。 
目录
《asp.net mvc 2开发实战》 
第1篇 基础观念篇 
第1章 在学习asp.net mvc之前 2 
1.1 何谓mvc 3 
1.1.1 何谓model 3 
1.1.2 何谓view 4 
1.1.3 何谓controller 5 
1.2 mvc架构初探 6 
1.2.1 关联性 6 
1.2.2 独立性 7 
1.3 为什么要使用asp.net mvc 8 
1.3.1 分解关注点与可维护性 8 
1.3.2 开放性与社区支持 9 
1.3.3 开发工具与开发效率 10 
1.3.4 易于测试的架构 10 
1.3.5 易于分工的架构 11 
总结 11 
第2章 建立正确的开发观念 12 
2.1 分解关注点 13 
2.2 以习惯取代配置 13 
.2.3 对开发asp.net mvc项目的建议 14 
2.4 asp.net mvc中常见的问题 18 
总结 25 
第3章 新手上路初体验 26 
3.1 认识visual studio 2010 27 
3.1.1 解决方案资源管理器窗口 27 
3.1.2 服务器资源管理器窗口 27 
3.1.3 工具箱窗口 27 
3.1.4 输出窗口 28 
3.1.5 错误列表窗口 28 
3.1.6 扩充管理器 29 
3.1.7 代码段管理器 29 
3.2 创建第1个asp.net mvc项目 30 
3.2.1 用asp.net mvc 2项目模板创建项目 30 
3.2.2 创建数据模型 38 
3.2.3 创建控制器和动作 41 
3.2.4 创建视图 42 
3.2.5 在视图中创建窗口 44 
3.2.6 通过action接收窗口数据 46 
3.2.7 实现留言显示功能 49 
3.3 学习mvc时的注意事项 53 
3.3.1 了解不同的项目类型 53 
3.3.2 初学者常犯的错误 53 
3.3.3 小心使用request对象和response对象 54 
3.3.4 不要在视图中编写过多的程序逻辑 54 
3.4 改良asp.net mvc项目 55 
3.4.1 使用视图数据模型 55 
3.4.2 使用窗口验证功能 58 
3.4.3 避免用户重复发送信息 65 
总结 68 
第2篇 技术讲解篇 
第4章 网址路由与asp.net mvc的生命周期 70 
4.1 网址路由 71 
4.1.1 比对通过浏览器传来的http请求 71 
4.1.2 将适当的网址返回浏览器 71 
4.1.3 默认网址路由 71 
4.2 http请求的url如何对应网址路由 73 
4.2.1 网址路由范例 73 
4.2.2 为网址路由加上限制条件 75 
4.3 网址路由如何在asp.net mvc中生成网址 76 
4.4 asp.net mvc的执行生命周期 81 
4.4.1 网址路由比对 81 
4.4.2 执行controller和action 83 
4.4.3 执行view并返回结果 86 
总结 87 
第5章 用model创建数据模型 88 
5.1 model的任务 89 
5.2 创建基础数据模型 89 
5.2.1 用linq to sql自动创建数据模型 90 
5.2.2 用entity framework自动创建数据模型 93 
5.2.3 手动创建数据模型 98 
5.3 扩充基础数据模型 99 
5.3.1 定义model的metadata 100 
5.3.2 自定义metadata验证属性 104 
5.4 实现库模式 104 
总结 106 
第6章 剖析controller的相关技术 107 
6.1 controller的责任 108 
6.2 controller的类与方法 108 
6.3 controller的执行过程 109 
6.4 动作名称选取器 111 
6.5 动作方法选取器 112 
6.5.1 nonaction属性 113 
6.5.2 httpget属性、httppost属性、httpdelete属性和httpput属性 113 
6.6 actionresult类 114 
6.6.1 viewresult类 115 
6.6.2 partialviewresult类 117 
6.6.3 emptyresult类 117 
6.6.4 contentresult类 118 
6.6.5 fileresult类 119 
6.6.6 强制下载文件时需注意中文文件名的问题 122 
6.6.7 javascriptresult类 124 
6.6.8 jsonresult类 124 
6.6.9 redirectresult类 126 
6.6.10 redirecttoroute类 126 
6.7 viewdata与tempdata概述 128 
6.7.1 viewdata 128 
6.7.2 tempdata 129 
6.8 模型绑定 131 
6.8.1 简单模型绑定 131 
6.8.2 使用formcollection类获取窗口数据 132 
6.8.3 复杂模型绑定 132 
6.8.4 多个复杂模型的绑定 134 
6.8.5 判断模型绑定的结果 136 
6.8.6 使用bind属性限制可被更新的model属性 138 
6.9 动作过滤器 141 
6.9.1 授权过滤器属性 142 
6.9.2 动作过滤器属性 145 
6.9.3 结果过滤器属性 147 
6.9.4 异常过滤器属性 149 
6.9.5 自定义动作过滤器属性 150 
总结 152 
第7章 view的相关技术 153 
7.1 view的责任 154 
7.2 不要用asp的观念来编写asp.net mvc程序 154 
7.3 view如何从action中获取数据 154 
7.3.1 如何正确分配view 155 
7.3.2 使用弱类型模型获取数据 156 
7.3.3 使用强类型模型获取数据 157 
7.4 html辅助方法 158 
7.4.1 如何使用html辅助方法 158 
7.4.2 html辅助方法的应用实例 160 
7.4.3 强类型辅助方法 165 
7.4.4 dynamic data对asp.net mvc的支持 166 
7.4.5 url辅助方法 167 
7.4.6 ajax辅助方法 169 
7.4.7 自定义html辅助方法 170 
7.4.8 tagbuilder类详解 173 
7.5 masterpage模板 176 
7.6 部分视图 178 
7.6.1 什么是部分视图 178 
7.6.2 如何创建一个部分视图 179 
7.6.3 如何调用部分视图 180 
7.6.4 部分视图的高级应用 181 
7.6.5 用renderaction() 方法加载部分视图 184 
总结 185 
第8章 area的相关技术 186 
8.1 何时需要使用area切割网站 187 
8.2 如何在现有项目中新建area 188 
8.3 如何设定area的网址路由 189 
8.4 默认路由与area路由的优先级 190 
8.5 就算使用area，controller的名称还是有冲突的 190 
8.6 如何指定默认网站与area网站的连接 191 
总结 192 
第3篇 开发实践篇 
第9章 mvcguestbook高级实战 194 
9.1 分析需求与创建网站雏形 195 
9.1.1 规划数据库结构 195 
9.1.2 创建基础数据模型 196 
9.1.3 规划网站功能 196 
9.1.4 设计controller与action 197 
9.1.5 创建基础页面 200 
9.2 实现会员机制 201 
9.2.1 会员注册机制 201 
9.2.2 会员登录/注销功能 212 
9.3 实现留言机制 219 
9.3.1 编写留言列表 219 
9.3.2 新建留言列表页面 221 
9.3.3 为留言列表添加分页功能 222 
9.3.4 编写会员留言功能 225 
9.3.5 编写会员留言视图 228 
9.3.6 编写版主回复功能 228 
9.3.7 创建版主回复视图 230 
9.3.8 编写删除留言功能 231 
9.4 实现动作记录机制 232 
9.4.1 编写actionlogattribute动作过滤器属性 232 
9.4.2 将属性应用到action 233 
9.5 强化model的结构 233 
9.6 使用控制反转容器 248 
9.6.1 asp.net mvc与autofac的集成 250 
9.6.2 asp.net mvc与autofac集成的原理 252 
9.6.3 让autofac自动解析接口和对应的类 252 
9.6.4 修正controller的构造符 255 
总结 256 
第10章 asp.net mvc开发技巧 257 
10.1 asp.net mvc的多语系支持 258 
10.2 在http响应标题中隐藏asp.net mvc的版本 261 
10.3 一起编译visual studio和view 262 
10.4 mvchtmlstring类的开发技巧 265 
10.5 在mvc与web forms之间传递数据 267 
10.5.1 http get方法（querystring集合）和http post方法 267 
10.5.2 session 267 
10.6 如何调试asp.net mvc源代码 268 
10.6.1 使用 .net framework源代码逐步调试功能 268 
10.6.2 下载asp.net mvc源代码并添加项目参考 273 
10.7 使用visual studio程序模板进行快速开发 279 
10.7.1 如何使用程序模板快速生成view 279 
10.7.2 如何将内置的程序模板添加到项目中 280 
10.7.3 如何修改内置的addcontroller程序模板并自动生成程序代码 283 
10.7.4 如何新建自定义的addview程序模板并自动生成程序代码 284 
10.7.5 深入t4程序生成器 287 
总结 287 
第11章 安装部署 288 
11.1 如何将网站部署到本地iis中 289 
11.2 如何部署远程iis 294 
11.3 如何用命令提示符手动部署 296 
11.4 部署asp.net mvc时常见的问题 299 
11.4.1 无法加载文件或组件 299 
11.4.2 部署到iis 6之后看不到网页 300 
11.4.3 部署到iis 6或iis 7之后都无法使用网站 302 
11.5 部署asp.net 4.0时的注意事项 304 
11.5.1 安装时的注意事项 304 
11.5.2 安装正确的 .net framework包 304 
11.5.3 应用程序集区不能跨 .net版本设置 305 
总结 305 
第12章 单元测试 306 
12.1 关于软件测试 307 
12.1.1 何谓单元测试 307 
12.1.2 何谓集成测试 308 
12.1.3 如何区别单元测试与集成测试 309 
12.1.4 何谓测试驱动开发 309 
12.2 创建asp.net mvc的单元测试项目 311 
12.2.1 单元测试项目的命名规则 311 
12.2.2 新建项目时自动创建单元测试项目 311 
12.2.3 通过单元测试向导创建单元测试项目 313 
12.2.4 在controller类中创建单元测试项目 315 
12.3 如何编写asp.net mvc单元测试 315 
12.3.1 单元测试的3a模板 316 
12.3.2 编写controller单元测试 316 
12.3.3 在visual studio中执行单元测试程序 319 
12.3.4 查看程序代码涵盖范围 320 
12.3.5 编写适合进行单元测试的程序代码 323 
12.3.6 使用stub假对象完成单元测试 325 
12.3.7 使用mock假对象完成单元测试 327 
12.3.8 编写routing单元测试 330 
总结 332 
前言
在开始学习ASP.NET MVC之前，我想许多读者心中应该都有疑惑，尤其是正宗的ASP.NET Web Forms开发者，更可能会对ASP.NET MVC技术给予异样的眼光甚至误解。 
《ASP.NET MVC 2开发实战》分为3篇，以循序渐进的方式揭开ASP.NET MVC的神秘面纱，引导读者建立正确的观念，实际体验ASP.NET MVC的强大魅力。 
建议阅读顺序： 
第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 2010创建一个ASP.NET MVC项目，让读者亲身体验ASP.NET MVC实际开发的完整过程。相信在逐步教学的带领之下，能让现有的ASP.NET Web Forms开发人员了解其与ASP.NET MVC开发的差异，进而快速上手。 
第2篇 技术讲解篇 
第4章 网址路由与ASP.NET MVC生命周期 
想要掌握ASP.NET MVC，最重要的是要了解网址路由（Routing）与ASP.NET MVC生命周期的重要概念。网址路由在ASP.NET MVC中有两个用途：一个用途是比对通过浏览器传来的HTTP请求，并将其对应到适当的控制器（Controller）与动作（Action）中进行处理；另一个用途是决定ASP.NET MVC应该输出什么样的网址来响应浏览器。虽然跳过本章你仍然可以成功地创建ASP.NET MVC网站，但阅读本章能帮助你理解ASP.NET MVC执行时的顺序，进而减少犯错的机会。 
第5章 用Model创建数据模型 
在用ASP.NET MVC开发网站的过程中，通常模型（Model）是整个项目中首先要开发的部分，所有需要进行数据访问的地方都仰赖模型提供服务。本章将讲解如何通过Visual Studio 2010自动建立数据模型以及手动建立和查看数据模型，并通过部分类的辅助方法实现基本的字段验证，甚至完成商业逻辑验证，最后通过实现库模式（Repository Pattern），让ASP.NET MVC项目更易于进行单元测试与测试驱动开发（Test-Driven Development，TDD）。 
第6章 剖析Controller的相关技术 
ASP.NET MVC的核心就是Controller，它负责处理浏览器传来的所有请求并决定响应的内容。但Controller并不负责决定如何显示内容，而是仅将特定类的内容响应给ASP.NET MVC框架。视图（View）才是决定响应内容的重要角色。本章也会应用第2章提及的“分解关注点”、“以习惯取代配置”、“不要重复你自己”等观念，带你迈入ASP.NET MVC的殿堂，发现ASP.NET MVC的核心之美。 
↓展开全部内容
序言回到顶部↑
笔者目前任职于多奇数位创意有限公司，担任技术总监一职，负责公司技术方向的决策。大约在两年多前，我开始注意到，ASP.NET MVC技术在国外渐渐发展起来。起初，我并不觉得它有什么特别的地方，但慢慢看到一些国外对ASP.NET MVC的开发观念与设计方法的讨论——好像它真的能够解决当时ASP.NET Web Forms开发上的难点，例如内置的控件不好用、控件套版不易、抽象的ASP.NET Web Forms事件模型经常让新手搞不清楚状况、过大的ViewState等，而这些都是我们在日常开发工作中会遇到的问题。 
直到2009年初，ASP.NET MVC 1.0正式版上市，除了还在创建与维护中的ASP.NET Web Forms项目不会改动之外，我毅然决然地带领公司的所有开发人员投入ASP.NET MVC的怀抱，并宣布未来所有新项目皆以ASP.NET MVC技术为主。这是一个重大的决定，也是一个我至今未曾后悔的决定。对我来说，学习一门全新技术的动机很重要。当你因为接触一门新技术而必须要放弃许多以往的开发经验时，如果没有明确的动机并发现转变的价值，是很难下定决心的。因此，要进入一个全新的技术领域，首先要感受技术的价值，然后是进一步研究技术的细节。 
本书的写作历时一年多的时间，在这段时间里，ASP.NET MVC的版本也从ASP.NET MVC 1.0升级到了ASP.NET MVC 2.0。由于ASP.NET MVC的观念与架构十分优秀、严谨，因此，技术升级的过程非常顺利，而且开发观念也不需要重新建立。对开发人员来说，即使升级至ASP.NET MVC 2.0，在学习上也没什么负担。即便是未来的ASP.NET MVC 3.0，微软的ASP.NET MVC开发团队也能保证它会与ASP.NET MVC 1.0兼容，早期编写的程序完全可以顺利转移。新版本的ASP.NET MVC只会继续在同一套架构上增强功能，并强化对Visual Studio 2010的支持。因此，笔者认为，ASP.NET MVC在未来非常具有可发展性。 
笔者曾经想过，我们公司会不会是台湾地区唯一一个只使用ASP.NET MVC技术开发网站项目的公司呢？不过，这并不是重点，重点是我们现在创建的网站不但更加安全、开发速度更快、项目生成和完成的时间更短，最重要的是，网站变得易于维护，质量也更高了，这都要归功于ASP.NET MVC的技术架构。因为ASP.NET MVC非常强调“分解关注点”的观念，而且从开发架构上来看，也很容易让开发人员做到“分解关注点”，这个优势是ASP.NET Web Forms完全无法匹敌的。 
本书集结了笔者在学习与开发ASP.NET MVC时的经验与心得，希望能带给所有.NET开发人员一个全新且优秀的选择。让我们一起拥抱ASP.NET MVC的世界吧！ 
能够顺利出版这本书，我要感谢很多人。首先，最感谢的是我的ASP.NET MVC开发团队，在公司里，他们写的Code比我写的字还多出很多很多，本书涉及的很多开发技巧与学习心得都来自于他们。除此之外，Demo、Thomsen、Danny、Bibby协助我撰写了部分章节，星寂、Jerry帮我完成了许多范例程序。我还要感谢帮我校稿与验证范例程序的朋友们，如果没有他们的协助，这本书恐怕很难完成。 
同时，也非常感谢悦知文化的编辑Vicky，在我写作的过程中提供了许多的协助并给予我包容，因为我从来就没有按照“写作说明”写作文章，即便要出书，也还是觉得写博客的心情与角度比较符合我的风格。 
这是我写的第一本书，如果读者对书中的内容或观念有任何不理解的地方，欢迎到我的博客、Facebook粉丝专页或噗浪（Plurk）上与我交流、互动。 
黄保翕（Will保哥）