Asp.Net Core 中区域的使用

1.什么是区域(Areas)

区域提供了一种将 ASP.NET Core Web 应用划分为更小的功能组的方法,每个功能组都有自己的一组 Razor Pages、控制器、视图和模型。 区域实际上是应用内的结构。 在 ASP.NET Core Web 项目中,Pages、模型、控制器和视图等逻辑组件保存在不同的文件夹中。 ASP.NET Core 运行时使用命名约定来创建这些组件之间的关系。对于大型应用,将应用分区为独立的高级功能区域可能更有利。

 ASP.NET Core 中的区域 | Microsoft Docs

2.如何为项目添加区域

在我们的项目名上使用脚手架添加区域,脚手架会帮我们创建完整的Areas文件结构。

输入我们要添加的Area名,这里添加的是MainPage区域。创建结果:

3.创建完区域的文件结构后,为了使用区域我们还要添加一些配置

我们在添加完Areas文件结构后后弹出一个如下窗口,告诉我们文件结构和引用都已经创建完成了,但我们需要做出一些改变才能正常使用。

Scaffolding has generated all the files and added the required dependencies.

However the Application's Startup code may require additional changes for things to work end to end.
Add the following code to the Configure method in your Application's Startup class if not already done:

        app.UseEndpoints(endpoints =>
        {
          endpoints.MapControllerRoute(
            name : "areas",
            pattern : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
          );
        });

(1)首先我们要添加一个可以供给区域使用的路由模板

在startup.cs文件文件中添加如下代码

app.UseEndpoints(endpoints =>
            {
                //供区域使用的路由
                endpoints.MapControllerRoute(
                    name: "areas",
                    pattern: "{area:exists}/{controller}/{action}/{id?}"
                    );
                //自定义路由系统endpoints.MapControllerRoute(); 有两个参数,第一个是路由名称,第二个是路由模板
                endpoints.MapControllerRoute(
                    //对MVC的路由,无区域的
                    name: "default",
                    pattern: "{controller=Home}/{action=ToLogin}/{id?}"
                    );
     
                //对Razor的路由
                endpoints.MapRazorPages();

            });

因为路由模板的使用使用顺序是按照配置顺序来执行的,带区域的路由比我们的默认路由更具有特定性,所以要把带区域的路由放在默认路由的上面。

{area:exists}中exists 声明了区域名必须完全匹配才能使用的约束。

(2)现在我们在区域的控制器中使用AreaAttribute来声明控制器所属的区域

    [Area("MainPage")] //指定区域,括号里是区域名
    [Route("[area]/[controller]/[action]")] //指定路由
    public class MainPageController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

注:我们的区域名必须要和当前区域文件夹的名称一致,否则在运行的时候会发生找不到对应视图的404错误。

(3) 添加布局视图,导入视图和启动视图 

4.其他区域转入另一个区域的方法

(1)在后台从使用重定向的方法,从一个Action中转入另一个区域的Action

// RedirectToAction("Adtion", "Controllere", new { area = "area" }); 
return RedirectToAction("Index", "MainPage", new { area = "MainPage" });

(2)前端请求,前端的方法就比较多了,这里只写了我用到方法。

<a asp-area="area" asp-controller="controller" asp-action="action" asp-all-route-data=参数></a>

<form asp-action="" asp-controller="" asp-area="" asp-all-route-data=""></form>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值