ASP.NET MVC4 完整教程
目录
-
(图片来源网络,侵删)- 什么是 ASP.NET MVC?
- 为什么选择 MVC?(与 Web Forms 的对比)
- MVC4 新特性概览
- 环境准备与项目创建
- 解析 MVC 项目结构
-
- Model (模型):数据与业务逻辑
- View (视图):用户界面
- Controller (控制器):请求处理与流程控制
- 路由:如何将 URL 映射到 Action
-
- 步骤 1:创建数据模型
- 步骤 2:使用 EF Code First 创建数据库
- 步骤 3:创建控制器和视图(CRUD 操作)
- 步骤 4:添加数据验证和样式
- 步骤 5:实现搜索功能
-
- 使用 JavaScript 和 AJAX
- 身份验证与授权
- 依赖注入
-
(图片来源网络,侵删)- 官方文档与教程
- 推荐书籍与博客
- 总结与下一步
第一部分:基础入门
1 什么是 ASP.NET MVC?
ASP.NET MVC 是一个用于构建 Web 应用程序的强大框架,它基于经典的 MVC (Model-View-Controller) 设计模式,旨在将一个应用程序分为三个相互关联的部分:
- Model (模型): 代表应用程序的数据和业务逻辑,它负责数据的状态管理,通常与数据库交互。
- View (视图): 负责显示数据(模型数据)给用户,它是用户界面。
- Controller (控制器): 接受来自用户的输入(通过浏览器请求),并调用模型和视图来响应用户,它是 Model 和 View 之间的协调者。
这种分离带来了许多好处,如关注点分离、可测试性、可维护性等。
2 为什么选择 MVC?
- 关注点分离: 代码结构清晰,开发人员可以专注于各自的部分(业务逻辑、UI、流程控制)。
- 高度可测试性: 因为各个部分是解耦的,所以可以为 Model 和 Controller 编写单元测试,而无需启动 Web 服务器或浏览器。
- 对 HTML 的完全控制: MVC 不使用服务器端控件,而是让你使用标准 HTML、CSS 和 JavaScript,这对于前端开发者非常友好。
- 基于 URL 的路由: 每个 URL 都直接对应到一个特定的 Action,这非常有利于 SEO(搜索引擎优化)和 RESTful 风格的设计。
- 可扩展性: 框架非常灵活,易于扩展和自定义。
3 MVC4 新特性概览
ASP.NET MVC4 引入了许多激动人心的新功能:
- 移动项目模板: 可以轻松创建专门针对移动设备(如智能手机、平板电脑)的应用。
- Web API: 用于构建基于 HTTP 的服务(RESTful API),可以被各种客户端(浏览器、手机、桌面应用)调用,这是构建现代单页应用后端的标准选择。
- 异步控制器: 原生支持
async/await关键字,能显著提高 I/O 密集型应用(如数据库查询、Web API 调用)的性能和可扩展性。 - Bundling and Minification: 将多个 CSS 或 JS 文件合并并压缩成一个文件,减少 HTTP 请求次数和文件大小,从而加快页面加载速度。
- 项目模板的改进: 默认模板更加现代化,包含了基于 jQuery 和 jQuery UI 的客户端交互。
4 环境准备与项目创建
-
安装软件:
- Visual Studio: 你需要 Visual Studio 2012 或更高版本,对于 ASP.NET MVC4,推荐使用 Visual Studio 2012,如果你使用的是更高版本(如 VS 2025/2025/2025),它仍然可以创建和运行 MVC4 项目。
- .NET Framework 4.5: MVC4 是基于 .NET Framework 4.5 构建的。
-
创建项目:
- 打开 Visual Studio。
- 选择 "文件" -> "新建" -> "项目"。
- 在左侧模板中选择 "Visual C#" -> "Web"。
- 在中间模板列表中,选择 "ASP.NET MVC 4 Web 应用程序"。
- 为你的项目命名(
MvcMovie),然后点击 "确定"。
-
选择项目模板:
- 在弹出的对话框中,你会看到几个模板选项:
- Internet 应用程序: 包含用户注册、登录、身份验证功能,适合大多数网站。
- Intranet 应用程序: 类似于 Internet 应用程序,但基于 Windows 身份验证。
- 空: 不包含任何默认文件,适合从头开始构建。
- 基本: 包含基本的 Home、About 和 Contact 页面。
- 移动 Web 应用程序: 专为移动设备优化。
- Web API: 专门用于构建 API 的项目。
- 为本教程,我们选择 "Internet 应用程序",然后点击 "确定"。
- 在弹出的对话框中,你会看到几个模板选项:
5 解析 MVC 项目结构
创建项目后,你会在 "解决方案资源管理器" 中看到以下关键文件夹:
- Controllers: 存放所有的控制器类,控制器以
Controller如HomeController)。 - Models: 存放数据模型类。
- Views: 存放所有的视图文件,Views 文件夹下通常会按控制器名称再创建子文件夹(如
Home,Movies)。 - Content: 存放静态内容,如 CSS 文件、图片、图标等。
- Scripts: 存放 JavaScript 文件。
- App_Start: 存放应用程序启动时的配置文件,如
RouteConfig.cs(路由配置)。 - App_Data: 存放数据文件,如 SQL Server 数据库文件 (
.mdf)。 - Global.asax: 应用程序的全局文件,包含应用程序生命周期事件。
第二部分:核心概念详解
1 Model (模型)
模型是应用程序的核心,它定义了你的数据结构以及处理这些数据的业务规则。
- 数据注解: 这是 ASP.NET MVC 中一个非常强大的特性,你可以通过在模型类上添加特性(Attributes)来元数据化你的模型,
[Required]: 标记属性为必填。[StringLength(100)]: 限制字符串的最大长度。[DisplayName("电影名称")]: 指定在 UI 中显示的名称。[DataType(DataType.Date)]: 指定数据类型。
2 View (视图)
视图负责显示数据,它通常是一个 HTML 文件,但混合了 Razor 语法( 符号)来嵌入服务器端代码。
- Razor 语法:
@Model.MovieTitle: 显示从控制器传递过来的MovieTitle属性的值。@foreach (var item in Model) { ... }: 遍历集合。@Html.TextBoxFor(m => m.Title): 这是一个 HTML Helper,它会自动生成一个<input type="text">标签,并绑定到模型的Title属性。
- 强类型视图: 视图通常被声明为强类型,
@model IEnumerable<Movie>,这使得在视图中使用智能感知成为可能,代码更安全、更易于编写。
3 Controller (控制器)
控制器是请求的入口,它不处理业务逻辑,也不负责生成 HTML,而是协调 Model 和 View。
- Action: 控制器中的公共方法称为 Action,每个 Action 对应一个可以访问的 URL。
- 返回结果:
View(): 返回一个视图,将数据传递给该视图进行渲染。Json(): 返回一个 JSON 格式的数据,常用于 AJAX 调用。RedirectToAction(): 重定向到另一个 Action。Content(): 返回纯文本内容。
4 路由
路由是连接 URL 和 Controller Action 的桥梁,它定义了应用程序如何响应 URL 请求。
- 默认路由: 在
App_Start/RouteConfig.cs文件中,你会看到默认的路由配置:routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );- 这条规则的意思是:如果访问
http://yourdomain.com/,它会自动映射到HomeController的IndexAction。 - 如果访问
http://yourdomain.com/Movie/Details/5,它会映射到MovieController的DetailsAction,并传递id=5作为参数。
- 这条规则的意思是:如果访问
第三部分:实战项目 - "电影清单"应用
我们将从头开始构建一个简单的电影清单应用程序,实现创建、读取、更新和删除功能。
步骤 1:创建数据模型
-
在 "解决方案资源管理器" 中,右键点击
Models文件夹,选择 "添加" -> "类"。 -
将类命名为
Movie.cs。 -
添加以下代码:
using System; using System.ComponentModel.DataAnnotations; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } [Required] public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [Required] public string Genre { get; set; } [Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; } } }
步骤 2:使用 EF Code First 创建数据库
我们将使用 Entity Framework (EF) 的 Code First 功能,它允许我们通过 C# 类来定义数据库结构,EF 会自动帮我们创建数据库。
-
安装 EF: 在 Visual Studio 中,点击 "工具" -> "库程序包管理器" -> "程序包管理器控制台",然后输入以下命令并回车:
Install-Package EntityFramework -
创建上下文: 上下文是 EF 与数据库交互的主要类,在
Models文件夹中,创建一个新类MovieDBContext.cs:using System.Data.Entity; using System.Data.Entity.Infrastructure; namespace MvcMovie.Models { public class MovieDBContext : DbContext { // MovieDBContext 连接到数据库,名称 "MovieDBContext" // 在 Web.config 文件中定义为一个连接字符串。 public DbSet<Movie> Movies { get; set; } } } -
配置连接字符串: 打开
Web.config文件(在项目根目录下),在<configuration>节点下找到<connectionStrings>节点,并添加以下连接字符串(如果不存在):<add name="MovieDBContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Initial Catalog=Movies;Integrated Security=True" providerName="System.Data.SqlClient" />- EF 会自动在
App_Data文件夹下创建一个名为Movies.mdf的 SQL Server Express 数据库文件。
- EF 会自动在
步骤 3:创建控制器和视图
这是最神奇的一步!我们将使用 Visual Studio 的脚手架功能来自动生成 CRUD 操作的控制器和视图。
-
添加控制器: 在 "解决方案资源管理器" 中,右键点击
Controllers文件夹,选择 "添加" -> "控制器"。 -
在弹出的对话框中:
- 控制器名称: 输入
MovieController。 - 模板: 选择 "包含读/写操作和视图,使用 Entity Framework 的 MVC 5 控制器"。
- 模型类: 选择 Movie (MvcMovie.Models)。
- 数据上下文类: 选择 MovieDBContext (MvcMovie.Models)。
- 视图: 保持默认选项(Razor 视图引擎)。
- 控制器名称: 输入
-
点击 "添加",Visual Studio 会自动为你创建
MovieController.cs文件,以及Views/Movie文件夹下的所有视图(Index.cshtml,Create.cshtml,Edit.cshtml,Details.cshtml,Delete.cshtml)。 -
设置首页: 打开
Controllers/HomeController.cs,将IndexAction 修改为重定向到Movie控制器的IndexAction:public ActionResult Index() { return RedirectToAction("Index", "Movie"); }
按 F5 运行你的应用程序,你应该能看到一个电影列表页面,由于数据库是空的,你可以点击 "Create New" 链接来添加几部电影,你会发现,所有的 CRUD 功能都已经可以使用了!EF Code First 自动为你创建了数据库表,并且脚手架生成的视图已经包含了数据验证逻辑。
步骤 4:添加数据验证和样式
-
修改模型验证: 打开
Movie.cs模型,修改Price属性的验证规则:[Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; }如果你尝试创建一个价格小于 1 或大于 100 的电影,表单验证会失败并显示错误信息。
-
添加布局和样式:
- 打开
Views/Shared/_Layout.cshtml,这是所有页面的母版页。 - 修改
<title>标签:<title>@ViewBag.Title - Movie App</title> - 在导航菜单
<ul>中,修改 "Home" 链接:@Html.ActionLink("Home", "Index", "Movie") - 在
Content文件夹中,可以添加一个自定义的 CSS 文件(如Site.css),然后在_Layout.cshtml中引用它来美化你的应用。
- 打开
步骤 5:实现搜索功能
-
修改 Movie 控制器: 打开
Controllers/MovieController.cs,在IndexAction 方法上添加[HttpPost]重载,用于处理搜索表单提交。// GET: /Movie/ public ViewResult Index(string searchString) { var movies = from m in db.Movies select m; if (!String.IsNullOrEmpty(searchString)) { movies = movies.Where(s => s.Title.Contains(searchString)); } return View(movies); } // POST: /Movie/ [HttpPost] public string Index(FormCollection fc, string searchString) { return "From [HttpPost]Index: filter on " + searchString; }- 注意:这里有两个
IndexAction,一个用于GET请求(直接访问页面),一个用于POST请求(提交搜索表单)。
- 注意:这里有两个
-
修改 Index 视图: 打开
Views/Movie/Index.cshtml。- 在
@model语句下方,@Html.ActionLink("Create New", "Create")之前,添加一个搜索框:@using (Html.BeginForm("Index", "Movie", FormMethod.Get)) { <p> Title: @Html.TextBox("SearchString") <br /> <input type="submit" value="Filter" /> </p> } - 这个
Html.BeginForm会创建一个指向Movie/Index的GET请求,而不是POST。
- 在
-
测试: 运行应用,你应该在电影列表页面上看到一个搜索框,输入电影标题进行搜索,列表会相应地更新。
第四部分:进阶主题
- 使用 JavaScript 和 AJAX: 在视图中,你可以使用
$.ajax或fetchAPI 来与服务器进行异步通信,实现无刷新页面更新。Controller中的Json()方法非常适合返回 AJAX 请求所需的数据。 - 身份验证与授权: MVC4 默认的 "Internet 应用程序" 模板已经集成了 ASP.NET Identity(或旧的 ASP.NET Membership),你可以使用
[Authorize]特性来保护控制器或 Action,只有登录用户才能访问。 - 依赖注入: MVC4 支持依赖注入,这可以让你更轻松地编写可测试的代码,你可以通过 NuGet 包(如
Unity.Mvc4)来集成 DI 容器。
第五部分:学习资源与总结
1 官方文档与教程
- ASP.NET 官方文档: https://docs.microsoft.com/zh-cn/aspnet/ - 最权威、最全面的学习资料。
- ASP.NET MVC 4 官方教程 (英文): https://www.asp.net/mvc/overview/older-versions/asp-net-mvc-4-getting-started - 这是 Microsoft 官方提供的、与我们本教程结构类似的详细教程。
2 推荐书籍与博客
- 书籍:
- 《Pro ASP.NET MVC 4》- Adam Freeman (经典之作,内容详尽)
- 《ASP.NET MVC 4 高级编程》- Jon Galloway 等
- 博客:
- ScottGu's Blog: Scott Guthrie (ASP.NET 之父) 的博客,有很多关于 MVC 的深度文章。
- Stack Overflow: 编程问题的终极宝库。
3 总结与下一步
恭喜你!你已经完成了 ASP.NET MVC4 的入门之旅,并亲手构建了一个功能完整的 Web 应用。
下一步可以学习的内容:
- 深入 Web API: 学习如何使用 MVC4 的 Web API 来构建 RESTful 服务,为移动应用或单页应用提供后端支持。
- 探索客户端框架: 学习如何将 MVC 与现代前端框架(如 Angular, React, Vue.js)结合,构建更富交互性的用户体验。
- 部署你的应用: 学习如何将你开发的应用部署到云服务器(如 Azure, AWS)或虚拟主机上,让全世界都能访问。
- 学习 ASP.NET Core: 虽然 MVC4 是一个经典的框架,但未来的方向是 ASP.NET Core,它是一个跨平台、高性能、开源的新一代框架,当你掌握了 MVC4 的核心思想后,学习 ASP.NET Core 会非常容易。
希望这份教程对你有帮助!祝你编码愉快!
