- ASP.NET MVC 4.0 简介:它是什么,为什么学它,以及它和现在流行的 .NET 有什么关系。
- 开发环境准备:如何在现代电脑上配置一个可以学习和运行 MVC 4.0 项目的环境。
- 核心概念:MVC 架构、项目结构、Routting(路由)等基础理论。
- 实战项目:创建一个简单的“任务清单”应用:通过一步步编码,让你掌握最核心的 MVC 开发流程。
- 进阶学习资源:学完基础后,可以继续学习的方向。
ASP.NET MVC 4.0 简介
什么是 ASP.NET MVC?
- ASP.NET:是微软用于构建 Web 应用程序的技术框架。
- MVC:是一种软件设计架构模式,全称为 Model-View-Controller(模型-视图-控制器),它将应用程序的三个核心部分分离开来,使代码更清晰、更易于维护和测试。
MVC 三大核心组件:
-
Model (模型):
(图片来源网络,侵删)- 职责:负责数据和业务逻辑,它代表应用程序的数据(比如数据库中的用户信息、文章内容),并包含处理这些数据的逻辑(比如验证用户输入、计算价格等)。
- 特点:Model 是完全独立于 UI 的,它不知道 View 和 Controller 的存在。
-
View (视图):
- 职责:负责用户界面,它展示 Model 的数据,并允许用户与数据进行交互(比如输入框、按钮、表格)。
- 特点:View 通常是 HTML 模板,使用 Razor 语法(在 MVC 3/4/5 中非常流行)来嵌入 C# 代码,以动态显示数据,它应该只负责显示,不包含复杂的业务逻辑。
-
Controller (控制器):
- 职责:是应用程序的“交通警察”,它接收来自用户的请求(比如点击了一个链接或提交了一个表单),调用 Model 来处理数据,然后选择一个合适的 View 来返回响应。
- 特点:Controller 本身不处理数据,也不负责生成 HTML,它只是协调 Model 和 View 之间的工作。
为什么学习 MVC 4.0?(以及为什么现在不直接用它做新项目)
-
优点:
- 关注点分离:代码结构清晰,易于团队协作和维护。
- 可测试性强:因为各个组件是解耦的,所以可以轻松地为 Model 和 Controller 编写单元测试。
- 对 SEO 友好:URL 结构清晰(如
/Products/Details/5),有利于搜索引擎优化。 - 完全控制:对 HTML 和请求/响应的生命周期有完全的控制权。
-
现状与未来:
(图片来源网络,侵删)- MVC 4.0 已经非常古老,微软官方已停止对其提供安全更新和支持。绝对不应该用于任何新的、面向生产环境的项目!
- 它的“精神”和核心思想被后来的 ASP.NET Core MVC 继承和发展了,现在的 Web 开发,微软主推的是 .NET 5/6/7/8 及其对应的 ASP.NET Core 框架。
为什么还要学它?
- 学习成本低:很多经典的教程和书籍是基于 MVC 4/5 的,对于初学者来说,概念更简单,没有像 .NET Core 那样复杂的依赖注入和配置。
- 理解核心概念:MVC 的基本模式(Model-View-Controller-路由)在 .NET Core 中没有本质变化,学好 MVC 4.0,再转向 .NET Core MVC 会非常快,因为你已经懂了“骨架”。
- 维护旧项目:如果你需要维护一个使用 ASP.NET MVC 4.0 的旧系统,那么学习它是必要的。
开发环境准备
你不需要安装 Visual Studio 2012(当年 MVC 4.0 的配套 IDE),我们可以使用现代的工具来运行它。
使用 Visual Studio 2025 + .NET Framework 4.5 (推荐)
这是最接近原生体验的方式。
- 安装 Visual Studio 2025 Community (免费版): https://visualstudio.microsoft.com/zh-hans/vs/community/
- 安装 .NET Framework 4.5.1 Developer Pack:
- 这是运行 MVC 4.0 应用程序所必需的,下载地址:https://dotnet.microsoft.com/download/dotnet-framework/net451
- 在安装 Visual Studio 2025 时,请确保勾选了 “.NET 桌面开发” 工作负载,这会自动安装大部分 .NET Framework 组件。
- 创建和打开项目:
- 打开 VS2025,选择“创建新项目”。
- 在模板搜索框中输入 "ASP.NET Web 应用程序"。注意:不要选择 "ASP.NET Core Web 应用程序"。
- 选择模板后,点击“下一步”,给项目命名。
- 在下一个窗口中,框架版本选择 .NET Framework 4.5,然后从左侧选择 "MVC" 模板。
- 点击“创建”,你就可以得到一个功能完整的 MVC 4.0/5.0 项目了。
使用 VS Code + .NET CLI (适合熟悉命令行的用户)
- 安装 Visual Studio Code: https://code.visualstudio.com/
- 安装 C# Dev Kit 扩展: 在 VS Code 的扩展市场搜索并安装。
- 安装 .NET SDK: 你需要安装一个包含 .NET Framework 运行时的旧版 SDK,一个比较方便的版本是 .NET Framework 4.7.2 SDK,你可以从 .NET 官网的归档版本中找到。
- 创建项目:
- 打开终端,运行命令:
dotnet new mvc -f net452 -n MyMvc4Project - 这会在
MyMvc4Project文件夹中创建一个 MVC 4.0 项目。 - 用 VS Code 打开这个文件夹,按
F5即可启动调试。
- 打开终端,运行命令:
核心概念
项目结构
当你创建一个新的 MVC 项目后,会看到几个关键的文件夹:
- Controllers/: 存放所有的控制器类,每个类通常对应一个功能模块。
- Models/: 存放所有的模型类。
- Views/: 存放所有的视图文件,Views 文件夹下通常会有与控制器同名的子文件夹(如
Home/,Account/)。 - App_Start/: 存放应用程序的配置文件,最重要的一个是
RouteConfig.cs,用于配置 URL 路由。 - App_Data/: 用于存放数据文件,如
.mdf数据库文件。 - Scripts/: 存放 JavaScript 文件。
- Content/: 存放 CSS 和图片等静态内容。
路由
路由是连接 URL 和 Controller/Action 的桥梁,它的作用是将用户请求的 URL 映射到相应的控制器方法上。

(图片来源网络,侵删)
打开 App_Start/RouteConfig.cs,你会看到默认的配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
url: "{controller}/{action}/{id}":这是 URL 的模式。{controller}: 将被替换为控制器的名称(不包含 "Controller" 后缀,如HomeController->Home)。{action}: 将被替换为控制器中的方法(Action)名称。{id}: 是一个可选的参数,用于传递 ID 等信息。
defaults: 定义了默认值,如果用户只访问http://your-site.com/,controller默认是Home,action默认是Index。
示例:
http://your-site.com/-> 映射到HomeController的Index方法。http://your-site.com/Home/About-> 映射到HomeController的About方法。http://your-site.com/Product/Details/5-> 映射到ProductController的Details方法,并传递id=5。
实战项目:创建一个简单的“任务清单”应用
我们将创建一个可以添加和显示任务列表的简单应用。
创建 Model (模型)
- 在
Models文件夹上右键 -> 添加 -> 类。 - 命名为
TaskItem.cs。 - 编写代码:
// Models/TaskItem.cs
using System;
using System.ComponentModel.DataAnnotations;
namespace Mvc4Tutorial.Models
{
public class TaskItem
{
public int Id { get; set; }
[Required(ErrorMessage = "任务标题不能为空")]
[Display(Name = "任务标题")]
public string Title { get; set; }
[Display(Name = "任务描述")]
public string Description { get; set; }
[Display(Name = "是否完成")]
public bool IsDone { get; set; }
[Display(Name = "创建时间")]
public DateTime CreatedDate { get; set; }
public TaskItem()
{
CreatedDate = DateTime.Now;
IsDone = false;
}
}
}
创建 Controller (控制器)
- 在
Controllers文件夹上右键 -> 添加 -> 控制器。 - 选择 “MVC 5 控制器 - 空” (即使你用的是 VS2025,创建针对 .NET Framework 的 MVC 项目时,模板仍然是旧的命名,但功能是兼容的)。
- 命名为
TaskController.cs。 - 编写代码,实现一个列表页和一个添加页。
// Controllers/TaskController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mvc4Tutorial.Models;
namespace Mvc4Tutorial.Controllers
{
public class TaskController : Controller
{
// 模拟一个数据库,实际项目中这里会是 Entity Framework 等
private static List<TaskItem> _taskDb = new List<TaskItem>();
// GET: Task
public ActionResult Index()
{
// 获取所有任务,并按创建时间倒序排列
var tasks = _taskDb.OrderByDescending(t => t.CreatedDate).ToList();
return View(tasks);
}
// GET: Task/Create
public ActionResult Create()
{
// 返回一个空的创建表单页面
return View();
}
// POST: Task/Create
[HttpPost]
[ValidateAntiForgeryToken] // 防止跨站请求伪造
public ActionResult Create(TaskItem newTask)
{
if (ModelState.IsValid)
{
// 模拟保存到数据库
_taskDb.Add(newTask);
return RedirectToAction("Index"); // 重定向到列表页
}
return View(newTask); // 如果模型验证失败,返回表单并显示错误信息
}
}
}
创建 View (视图)
- 在
TaskController的Index方法上右键 -> 添加视图。 - 选择 “Razor” 引擎,“创建强类型视图”,在模型类下拉框中选择
Mvc4Tutorial.Models.TaskItem, scaffolding template(模板)选择 "List"。 - 点击“添加”,VS 会自动生成一个
Views/Task/Index.cshtml文件。 - 同样,在
Create方法上右键 -> 添加视图,选择 “Razor”,创建强类型视图,模型类选择Mvc4Tutorial.Models.TaskItem, scaffolding template(模板)选择 "Create"。 - 点击“添加”。
运行你的项目,在浏览器地址栏输入 /Task,你应该能看到一个任务列表页面,并且可以通过 /Task/Create 访问添加页面。
修改和美化视图 (可选)
打开 Views/Task/Index.cshtml,你可以看到自动生成的代码,修改一下,让它更美观:
@model IEnumerable<Mvc4Tutorial.Models.TaskItem>
@{
ViewBag.Title = "任务列表";
}
<h2>我的任务清单</h2>
<p>
@Html.ActionLink("添加新任务", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.IsDone)
</th>
<th>
@Html.DisplayNameFor(model => model.CreatedDate)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@if (item.IsDone)
{
<span style="color:green;">已完成</span>
}
else
{
<span style="color:red;">未完成</span>
}
</td>
<td>
@Html.DisplayFor(modelItem => item.CreatedDate)
</td>
<td>
@Html.ActionLink("编辑", "Edit", new { id=item.Id }) |
@Html.ActionLink("详情", "Details", new { id=item.Id }) |
@Html.ActionLink("删除", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
打开 Views/Task/Create.cshtml,也可以稍微调整一下布局。
进阶学习资源
当你掌握了以上基础后,可以继续学习以下内容:
- 数据访问:学习使用 Entity Framework (EF),这是微软的 ORM(对象关系映射)框架,可以让你用 C# 对象直接操作数据库,而不用写 SQL 语句。
- 表单验证:深入学习
DataAnnotations,实现更复杂的客户端和服务器端验证。 - 会员和授权:学习如何使用 ASP.NET Identity(MVC 5 引入的更现代的会员系统)来管理用户登录、注册和权限控制。
- 依赖注入:了解什么是依赖注入以及它如何让代码更灵活、更易于测试(虽然 MVC 4 本身对 DI 的支持不如 .NET Core 完善,但了解这个概念很重要)。
- JavaScript 前端框架:学习使用 jQuery、KnockoutJS 或 AngularJS 来构建更丰富的用户交互体验。
推荐书籍和网站
- 经典书籍:《ASP.NET MVC 4 高级编程》(Pro ASP.NET MVC 4),虽然书很旧,但前几章关于 MVC 基础的讲解非常经典。
- 在线教程:虽然很多新教程都是针对 .NET Core 的,但可以重点关注那些讲解“MVC 思想”而非“.NET Core 特定配置”的内容,官方的 ASP.NET Core 教程,忽略 .NET Core 的项目创建部分,专注于其 MVC 的结构和代码逻辑,这些与 MVC 4 是相通的。
学习 ASP.NET MVC 4.0 是一个非常好的起点,它能帮助你牢固地理解 MVC 设计模式,虽然它不是当前工业界的主流技术,但掌握它后,你会发现学习现代的 ASP.NET Core MVC 变得非常轻松,因为核心思想一脉相承,祝你学习愉快!
