Skip to content

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、 NHibernatehttp://sourceforge.net/projects/nhibernate/)和 Entity Frameworkhttp://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 架构模式(模型 – 视图 – 控制器):

处理客户端请求的过程如下:

  1. 请求 - 请求的 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。
  2. 处理
  • 所选操作可以利用 parami 传递给它的参数。这些参数可能来自多个来源:
  • URL 的路径 [/param1/param2/...],
  • 来自 URL 的 [p1=v1&p2=v2] 参数
  • 浏览器随请求发送的参数;
  • 在处理用户请求时,该操作可能需要 [métier] 和 [2b] 层。一旦处理了客户端的请求,该操作可能会触发各种响应。一个典型的例子是:
  • 如果请求无法正确处理,则返回错误页面
  • 否则显示确认页面
  • 该操作会要求显示某个视图 [3]。该视图将显示被称为视图模型的数据。这就是 MVC 中的 M。 该操作将创建视图模型 M [2c],并要求显示视图 V [3];
  1. 响应——选定的视图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]( )。操作步骤如下:

 
  • 此时该应用程序即可下载:
  • 要获取该应用,您需要创建一个 Google 账户。随后 [Google Web Store] 会要求确认 [1]:
  • 在 [2] 中,已添加的扩展程序可在 [Applications] [3] 选项中找到。该选项会显示在您在浏览器中创建的每个新标签页(CTRL-T)上。

1.4. 示例

大多数学习示例将仅限于 Web 层:

完成本教程后,我们将介绍一个多层Web应用程序: