理解 ASP.NET MVC (模型-视图-控制器) 架构,面向初学者






4.46/5 (148投票s)
学习 ASP.NET MVC (模型-视图-控制器) 架构和基础知识,面向初学者
引言
本文旨在为初学者提供 ASP.NET MVC (模型-视图-控制器) 架构工作流程的基本概念和基础知识。
“M”“V”“C”代表“模型”“视图”“控制器”。ASP.NET MVC 是一种以不同于传统 ASP.NET Web 开发的方式开发 ASP.NET Web 应用程序的架构。使用 ASP.NET MVC 开发的 Web 应用程序对 SEO(搜索引擎)更加友好。
开发 ASP.NET MVC 应用程序需要 Microsoft .NET Framework 3.5 或更高版本。
MVC 与浏览器的交互
像正常的 Web 服务器交互一样,MVC 应用程序也以相同的方式接受请求并响应 Web 浏览器。

MVC 架构内部
整个 ASP.NET MVC 架构基于 Microsoft .NET Framework 3.5,此外还使用 LINQ to SQL Server。
什么是模型 (Model)?
- MVC 模型 (model) 基本上是一个 C# 或 VB.NET 类
- 模型 (model) 可由控制器 (controller) 和视图 (view) 访问
- 模型 (model) 可用于将数据从控制器 (Controller) 传递到视图 (view)
- 视图 (view) 可以使用模型 (model) 在页面中显示数据。
什么是 View?
- 视图 (View) 是一个没有代码隐藏文件的 ASPX 页面
- 所有页面特定的 HTML 生成和格式化都可以在视图 (view) 中完成
- 可以使用内联代码(服务器标记)来开发动态页面
- 只能从控制器 (controller) 的操作方法 (action method) 请求视图 (view)(ASPX 页面)
什么是控制器 (Controller)?
- 控制器 (Controller) 基本上是一个继承自 system.mvc.controller 的 C# 或 VB.NET 类
- 控制器 (Controller) 是整个 MVC 架构的核心
- 在控制器 (Controller) 的类中,可以实现负责响应浏览器或调用视图 (views) 的操作方法 (action methods)。
- 控制器 (Controller) 可以访问和使用模型 (model) 类以将数据传递到视图 (views)
- 控制器 (Controller) 使用 ViewData 将任何数据传递到视图 (view)

MVC 文件结构和文件命名标准
MVC 使用标准目录结构和文件命名标准,这是 MVC 应用程序开发非常重要的组成部分。
在应用程序的 ROOT 目录中,必须有 3 个目录,每个目录分别用于模型 (model)、视图 (view) 和控制器 (Controller)。
除了 3 个目录外,根文件夹中必须有一个 Global.asax 文件,以及像传统 ASP.NET 应用程序一样的 web.config。
- Root [目录]
- Controller [目录]
- Controller CS 文件
- Models [目录]
- Model CS 文件
- Views [目录]
- View aspx/ascx 文件
- Global.asax
- Web.config
- Controller [目录]
ASP.NET MVC 执行生命周期
以下是 MVC 架构如何执行对浏览器的请求以及对象之间如何交互。
以下逐步解释该过程 [请参考下面给出的图]

浏览器请求(步骤 1)
浏览器请求发生在特定的 URL 中。假设用户输入的 URL 类似于:[xyz.com]/home/index/
Global.asax 的工作 - MVC 路由(步骤 2)
指定的 URL 将首先通过 Global.asax 文件中的 application_start()
方法进行解析。 从请求的 URL 中,它将解析控制器 (Controller)、操作 (Action) 和 ID。
所以对于 [xyz.com]/home/index/
- Controller = home
- Action = index()
- ID = empty - 我们没有在 [xyz.com]/home/index/ 中指定 ID,所以它将视为空字符串
控制器 (Controller) 和操作 (Action) 方法(步骤 3)
MVC 现在在控制器 (controller) 目录中找到 home controller 类。 一个控制器 (controller) 类包含不同的操作 (action) 方法,
可以有多个操作 (action) 方法,但 MVC 只会调用从 URL 解析的操作 (action) 方法,在本例中是 index()
。
所以类似:homeController.index()
将在 MVC 控制器 (controller) 类中发生。
调用操作 (action) 方法可以返回纯文本字符串或使用视图 (view) 渲染的 HTML。
调用视图 (View)(步骤 4)
调用视图 (view) 将返回 view()
。调用视图 (view) 将访问视图 (view) 目录中的特定 ASPX 页面,并从 ASPX 生成渲染的 HTML,然后响应回浏览器。
在我们的例子中,控制器 (controller) 是 home,操作 (action) 是 index()
。因此,调用 view()
将从位于 /views/home/index.aspx 的 ASPX 页面返回渲染的 HTML。
就是这样,整个过程到此结束。这就是 MVC 架构的工作方式。
历史
- 2010 年 1 月 26 日:初始发布