1. 简介
本文档的 PDF 版本可通过 |HERE| 获取。
本文档的示例可通过 |HERE| 获取。
本文旨在通过实例介绍 ASP.NET MVC 这一 Web 框架的重要概念。NET 提供了一个框架,用于根据 MVC 模型(模型-视图-控制器)开发 Web 应用程序。
理解本文中的示例几乎不需要任何先决条件。仅需具备C#语言的基础知识。相关内容可在《C#语言入门》文档中找到。 本文提供了一个案例研究,用于实践在ASP.NET和MVC中习得的知识。该案例使用ORM(对象关系映射器)Entity Framework。 该ORM在《Entity Framework 5 Code First入门》文档中有所介绍,该文档可在URL [http://tahe.developpez.com/dotnet/ef5cf]处获取。
本文档中的各种示例以可下载的zip文件形式提供,可在URL和[http://tahe.developpez.com/dotnet/aspnetmvc]处获取。
本文档在许多方面尚不完整。如需深入了解 ASP.NET MVC,可参考以下资料:
- [ref1]:由亚当·弗里曼(Adam Freeman)撰写、Apress出版社出版的《Pro ASP.NET MVC 4》一书。这是一本非常优秀的书籍。如果该书能免费在线提供且有法语版本,那么本文便没有存在的必要了。 我建议所有有条件的人都通过这本书来学习ASP.NET MVC。书中示例的源代码可在URL [http://www.apress.com/9781430242369]上免费获取;
- [ref2]:[http://www.asp.net/mvc]框架的官方网站。该网站提供了自学所需的所有资料。法语版本可在URL [http://dotnet.developpez.com/mvc/ ]上获取;
- [developpez.com]网站专门介绍ASP.NET和[http://dotnet.developpez.com/aspnet/ ]。
本文档的编写方式使其无需电脑即可阅读。因此,文中提供了大量屏幕截图。
1.1. ASP.NET MVC在Web应用中的地位
首先,让我们明确 ASP.NET MVC 在 Web 应用程序开发中的定位。通常,该应用程序将基于如下所示的多层架构构建:
![]() |
- [Web] 层是与 Web 应用程序用户直接交互的层。用户通过浏览器显示的网页与 Web 应用程序进行交互。 ASP.NET MVC 位于该层,且仅位于该层;
- [métier] 层实现应用程序的管理规则,例如工资或发票的计算。 该层通过 [Web] 层使用来自用户的数据,并通过 [DAO] 层使用来自 SGBD 的数据;
- [DAO] 层(数据访问对象)、[ORM] 层(对象关系映射器)以及 ADO.NET 连接器负责管理对 SGBD 层数据的访问。 [ORM] 层在 [DAO] 层处理的对象与关系型数据库表中的行和列之间架起了一座桥梁。 全球范围内通常使用两个 ORM:NET、 NHibernate(http://sourceforge.net/projects/nhibernate/)和 Entity Framework(http://msdn.microsoft.com/en-us/data/ef.aspx);
- 各层的集成可通过依赖注入容器(Dependency Injection Container)实现,例如 Spring(http://www.springframework.net/);
下文中给出的多数示例仅使用一个层,即 [Web] 层:
![]() |
不过,本文最后将介绍如何构建一个多层Web应用程序:
![]() |
1.2. ASP.NET MVC
ASP.NET MVC 通过以下方式实现了所谓的 MVC 架构模式(模型 – 视图 – 控制器):
![]() |
处理客户端请求的过程如下:
- 请求 - 请求的 URL 采用 http://machine:port/contexte/Controlleur/Action/param1/param2/....?p1=v1&p2=v2&... 格式[Front Controller] 使用配置文件将请求“路由”到正确的控制器,并定位该控制器内的正确操作。 为此,它使用 URL 中的路径 [Controlleur/Action]。URL 和 [/param1/param2/...] 的其余部分是可选参数,这些参数将传递给操作。 此处的 MVC 中的 C 代表字符串 [Front Controller, Contrôleur, Action]。 如果路径 [Controlleur/Action] 未指向现有的控制器或操作,Web 服务器将响应称未找到所请求的 URL。
- 处理
- 所选操作可以利用 parami 传递给它的参数。这些参数可能来自多个来源:
- URL 的路径 [/param1/param2/...],
- 来自 URL 的 [p1=v1&p2=v2] 参数
- 浏览器随请求发送的参数;
- 在处理用户请求时,该操作可能需要 [métier] 和 [2b] 层。一旦处理了客户端的请求,该操作可能会触发各种响应。一个典型的例子是:
- 如果请求无法正确处理,则返回错误页面
- 否则显示确认页面
- 该操作会要求显示某个视图 [3]。该视图将显示被称为视图模型的数据。这就是 MVC 中的 M。 该操作将创建视图模型 M [2c],并要求显示视图 V [3];
- 响应——选定的视图V使用操作生成的模型M来初始化响应HTML中的动态部分,随后将该响应发送给客户端。
现在,让我们明确 Web 架构 MVC 与分层架构之间的联系。根据对模型的定义,这两个概念可能相关,也可能无关。以一个单层 Web 应用程序 ASP.NET MVC 为例:
![]() |
如果我们通过 ASP.NET 和 MVC 来实现 [Web] 层,那么虽然形成了 Web 架构 MVC,但这并非多层架构。 在此情况下,[Web]层将负责所有工作:呈现、业务逻辑、数据访问。这些工作将由操作(actions)来完成。
现在,让我们考虑一种多层Web架构:
![]() |
[Web]层可以在不使用框架且不遵循MVC模型的情况下实现。这样虽然确实形成了一个多层架构,但Web层并未实现MVC模型。
因此,上文中的 [Web] 层可与 ASP.NET、MVC 一起实现,从而形成一种分层架构,其中 [Web] 层属于 MVC 类型。 完成上述操作后,可以将该 ASP.NET MVC 层替换为经典的 ASP.NET 层(WebForms),同时保持其余部分 (业务层、DAO、ORM)保持不变。 此时便形成了一个分层架构,其中 [Web] 层不再属于 MVC 类型。
在 MVC 中,我们提到模型 M 即视图 V(c.a.d)所展示的数据集合。这里给出 MVC 模型 M 的另一种定义:
![]() |
许多作者认为,位于 [Web] 层右侧的内容构成了 MVC 的模型 M。为避免歧义,我们可以这样表述:
- 域模型(指 [Web] 层右侧的所有内容)
- 当指代视图 V 所显示的数据时,称为视图模型
下文中,“M模型”一词将专指视图V的模型。
1.3. 使用的工具
在接下来的内容中,我们将使用(2013年9月)Visual Studio 2012的Express版本:
- [http://www.microsoft.com/visualstudio/fra/products/visual-studio-express-for-windows-desktop ] 用于桌面应用程序;
- [http://www.microsoft.com/visualstudio/fra/products/visual-studio-express-for-Web ] 用于 Web 应用程序。
若要安装这些产品的最新版本,可使用微软的 [Web Platform Installer] 产品(http://www.microsoft.com/Web/downloads/platform.aspx)。
此外,需使用谷歌的Chrome浏览器(http://www.google.fr/intl/fr/chrome/browser/)。并为其安装扩展程序[Advanced Rest Client]( )。操作步骤如下:
- 使用Chrome浏览器访问[Google Web store]网站(https://chrome.google.com/webstore);
- 搜索 [Advanced Rest Client] 应用:
![]() |
- 此时该应用程序即可下载:
![]() |
- 要获取该应用,您需要创建一个 Google 账户。随后 [Google Web Store] 会要求确认 [1]:
![]() |
- 在 [2] 中,已添加的扩展程序可在 [Applications] [3] 选项中找到。该选项会显示在您在浏览器中创建的每个新标签页(CTRL-T)上。
1.4. 示例
大多数学习示例将仅限于 Web 层:
![]() |
完成本教程后,我们将介绍一个多层Web应用程序:
![]() |











