3.9 区域 (Areas)


文档摘要

3.9 区域 (Areas) 3.9 区域 (Areas) 在大型 ASP.NET Core MVC 应用程序中,将应用程序分解成更小的、功能独立的模块通常是有益的。这些模块可以由不同的团队开发和维护,并且可以独立部署。 Areas 提供了一种将大型 MVC 应用程序组织成较小功能组的方法。 简单来说,区域 (Areas) 允许你将相关的控制器、模型和视图组织到单独的命名空间和文件夹结构中,从而提高代码的可维护性和可重用性。 3.9.1 为什么使用 Areas? 模块化: 将大型应用程序划分为更小的、可管理的模块。 代码组织: 将相关的控制器、视图和模型放在一起,提高代码可读性和可维护性。 团队协作: 允许不同的团队专注于应用程序的不同部分。 命名空间隔离: 避免控制器名称冲突。

3.9 区域 (Areas)

3.9 区域 (Areas)

在大型 ASP.NET Core MVC 应用程序中,将应用程序分解成更小的、功能独立的模块通常是有益的。这些模块可以由不同的团队开发和维护,并且可以独立部署。 Areas 提供了一种将大型 MVC 应用程序组织成较小功能组的方法。 简单来说,区域 (Areas) 允许你将相关的控制器、模型和视图组织到单独的命名空间和文件夹结构中,从而提高代码的可维护性和可重用性。

3.9.1 为什么使用 Areas?

  • 模块化: 将大型应用程序划分为更小的、可管理的模块。

  • 代码组织: 将相关的控制器、视图和模型放在一起,提高代码可读性和可维护性。

  • 团队协作: 允许不同的团队专注于应用程序的不同部分。

  • 命名空间隔离: 避免控制器名称冲突。

  • 路由隔离: 允许为不同的区域定义不同的路由规则。

  • 代码重用: 允许在不同的应用程序中重用区域。

3.9.2 Areas 的结构

一个 Area 通常包含以下内容:

  • Area 文件夹: 位于应用程序根目录下的一个文件夹,用于存放 Area 的所有相关文件。

  • 控制器 (Controllers): 位于 Area 文件夹下的 Controllers 文件夹中。

  • 视图 (Views): 位于 Area 文件夹下的 Views 文件夹中。

  • 模型 (Models): 位于 Area 文件夹下的 Models 文件夹中。

  • AreaRegistration.cs (或类似的配置): 用于注册 Area 的路由。在 ASP.NET Core 中,Area 路由通常在 Startup.csProgram.cs 中配置。

3.9.3 创建和配置 Areas

以下步骤演示如何在 ASP.NET Core MVC 应用程序中创建和配置 Areas:

3.9.3.1 创建 Area 文件夹

  1. 在你的 ASP.NET Core MVC 项目的根目录下,创建一个新的文件夹,命名为你想创建的 Area 的名称。 例如,创建一个名为 Admin 的 Area,则创建一个名为 Admin 的文件夹。

3.9.3.2 添加 MVC 区域支持

Program.cs 文件中(或者 Startup.cs 如果你使用的是旧版本的 ASP.NET Core),确保你添加了对 Areas 的支持。 这通常涉及使用 MapAreaControllerRoute 方法。

// Program.cs (或者 Startup.cs) var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapAreaControllerRoute( name: "Admin", //Area 名称 areaName: "Admin", // Area 名称 pattern: "Admin/{controller=Home}/{action=Index}/{id?}"); //路由模式 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();

3.9.3.3 创建控制器和视图

  1. Admin 文件夹下,创建 Controllers 文件夹。

  2. Controllers 文件夹中,创建一个名为 HomeController.cs 的控制器。

// Areas/Admin/Controllers/HomeController.cs using Microsoft.AspNetCore.Mvc; namespace YourProjectName.Areas.Admin.Controllers { [Area("Admin")] public class HomeController : Controller { public IActionResult Index() { return View(); } } }
  1. Admin 文件夹下,创建 Views 文件夹。

  2. Views 文件夹下,创建 Home 文件夹。

  3. Home 文件夹中,创建一个名为 Index.cshtml 的视图。

@* Areas/Admin/Views/Home/Index.cshtml *@ @{ ViewData["Title"] = "Admin Home Page"; } <h1>Welcome to the Admin Area!</h1>

3.9.3.4 运行应用程序

运行应用程序,并导航到 /Admin/Home/Index。 你应该看到 "Welcome to the Admin Area!" 消息。

3.9.4 Areas 的路由

ASP.NET Core MVC 使用路由来确定哪个控制器和操作方法应该处理特定的请求。 当使用 Areas 时,路由必须配置为识别 Area 的结构。

在上面的 Program.cs 示例中,MapAreaControllerRoute 方法用于配置 Admin Area 的路由。

  • name: 路由的名称。

  • areaName: Area 的名称。 这必须与 Area 文件夹的名称匹配。

  • pattern: 路由模式。 {area}/{controller}/{action}/{id?} 是一个常见的模式,其中 {area} 是 Area 的名称,{controller} 是控制器的名称,{action} 是操作方法的名称,{id} 是可选的 ID 参数。

3.9.5 Areas 的视图

当在 Area 中使用视图时,需要确保视图引擎能够找到正确的视图文件。 默认情况下,ASP.NET Core MVC 会在以下位置查找视图:

  1. Areas/{AreaName}/Views/{ControllerName}/{ActionName}.cshtml

  2. Areas/{AreaName}/Views/Shared/{ViewName}.cshtml

  3. Views/{ControllerName}/{ActionName}.cshtml

  4. Views/Shared/{ViewName}.cshtml

这意味着,如果你在 Admin Area 的 HomeController 中有一个名为 Index 的操作方法,视图引擎将首先在 Areas/Admin/Views/Home/Index.cshtml 中查找视图。 如果找不到,它将在其他位置查找。

3.9.6 Areas 的链接生成

在视图和控制器中生成指向 Areas 的链接时,可以使用 asp-area 属性。

例如,要在视图中生成指向 Admin Area 的 HomeControllerIndex 操作方法的链接,可以使用以下代码:

<a asp-area="Admin" asp-controller="Home" asp-action="Index">Admin Home</a>

3.9.7 Areas 的优点和缺点

优点:

  • 更好的代码组织: Areas 帮助你将大型应用程序组织成更小的、可管理的模块。

  • 更好的可维护性: Areas 使代码更易于维护和更新。

  • 更好的团队协作: Areas 允许不同的团队专注于应用程序的不同部分。

  • 避免命名冲突: Areas 使用命名空间来避免控制器名称冲突。

缺点:

  • 增加复杂性: Areas 增加了应用程序的复杂性。

  • 学习曲线: Areas 需要一定的学习曲线。

  • 过度使用: 不应该过度使用 Areas。 只有在应用程序变得非常大且复杂时才应该使用它们。

3.9.8 何时使用 Areas

以下是一些可以使用 Areas 的情况:

  • 你的应用程序非常大且复杂。

  • 你的应用程序包含多个功能独立的模块。

  • 你希望不同的团队专注于应用程序的不同部分。

  • 你需要避免控制器名称冲突。

  • 你需要为不同的区域定义不同的路由规则。

3.9.9 示例:电子商务网站的 Areas

假设你正在开发一个电子商务网站。 你可以将应用程序划分为以下 Areas:

  • Catalog: 用于浏览和搜索产品。

  • ShoppingCart: 用于管理购物车。

  • Checkout: 用于完成订单。

  • Admin: 用于管理网站。

每个 Area 都可以包含自己的控制器、视图和模型。 这样可以使应用程序更易于管理和维护。

3.9.10 Mermaid 图示

以下是一个使用 Mermaid 绘制的 Areas 的结构图:

graph TD A[Application Root] --> B(Areas); B --> C{Area 1}; B --> D{Area 2}; C --> E[Controllers]; C --> F[Views]; C --> G[Models]; D --> H[Controllers]; D --> I[Views]; D --> J[Models]; E --> K((Controller1.cs)); E --> L((Controller2.cs)); F --> M((View1.cshtml)); F --> N((View2.cshtml)); H --> O((ControllerA.cs)); I --> P((ViewA.cshtml));

3.9.11 总结

Areas 是 ASP.NET Core MVC 中一个强大的工具,可以帮助你将大型应用程序组织成更小的、可管理的模块。 通过使用 Areas,你可以提高代码的可读性、可维护性和可重用性。 但是,Areas 也会增加应用程序的复杂性,因此应该谨慎使用。 只有在应用程序变得非常大且复杂时才应该使用它们。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U