标题：ASP.NET MVC 2程序开发
基本信息
作者：黄保翕（Will保哥）   陈酉玫   李杨  
出版社：电子工业出版社
ISBN：9787121127885
出版日期：2011 年3月
开本：16开
页码：331
版次：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开发人员阅读。
作译者
黄保翕(Will保哥)微软最有价值专家(MVP)；擅长各种Web解决方案、大中型网站架构、数据库系统、网站内容管理系统的设计；也是网络知名的技术专家，博客“The Will Will Web”目前已经累积近千篇文章，提供Web相关技术的实用解决方案。
目录
《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保哥）