[译]ASP.NET Core 2.0 区域
问题
如何将一个规模庞大的ASP.NET Core 2.0应用程序进行逻辑分组?
答案
新建一个ASP.NET Core 2.0空项目,修改Startup类,增加Mvc服务和中间件:
public void ConfigureServices(IServiceCollection services)
{services.AddMvc();
}public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvc(routes =>{routes.MapRoute(name: "area",template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");});
}
创建目录结构如下所示:
向Controllers和Views目录中添加文件(其中Area1的目录结构如下):
向Area1和Area2目录中的控制器类添加[Area]特性:
namespace Areas.Areas.Area1.Controllers
{[Area("Area1")]public class HomeController : Controller{public IActionResult Index(){return View();}public IActionResult About(){return View();}}
}
运行,此时页面显示:
点击超链接Area1/Home/Index,页面显示:
返回首页,点击超链接Area2/Home/Index,页面显示:
讨论
MVC使用模型、视图和控制器来分离应用程序的关注点。对于更大的应用程序,区域提供了一种将这三个关注点隔离到更高级别分组中的方法。例如,你可能希望将应用程序分隔成不同的模块,每个模块都包含自己的MVC结构。
为了支持路由,还有另外一个路由参数area(作为对controller和action参数的补充)。你可以将区域假想为控制器的命名空间。在当前请求上下文中,area路由参数也可以作为环境变量存在(无需显示提供)。下面的示例中,由于页面存在于Area1区域中,所以链接到本区域的超链接省略了area参数(下面小节会详细讨论):
<p><strong>You are here: </strong>Area1/Home/Index</p><ul><li><a asp-area="" asp-controller="Home" asp-action="Index">Home/Index</a></li><li><a asp-area="" asp-controller="Home" asp-action="About">Home/About</a></li><li><a asp-controller="Home" asp-action="Index">Area1/Home/Index</a></li><li><a asp-controller="Home" asp-action="About">Area1/Home/About</a></li><li><a asp-area="Area2" asp-controller="Home" asp-action="Index">Area2/Home/Index</a></li><li><a asp-area="Area2" asp-controller="Home" asp-action="About">Area2/Home/About</a></li>
</ul>
为了在项目中使用区域,你首先需要创建一个以Areas命名的目录和每个具体的区域(包含其控制器、模型和视图)。注意目录结构的命名非常重要,因为MVC会按照如下顺序查找视图所在的位置:
一旦目录结构创建成功,你就可以通过[Area]特性来标识每个控制器了:
[Area("Area1")]
public class HomeController : Controller
{
}
生成链接
下面表格列出了生成超链接所需要的路由参数,其中From为超链接所在的页面,To为超链接需要跳转的页面,链接格式为:{area}/{controller}/{action}。
如果省略路由参数,则意味着MVC会从当前请求上下文中检索这些参数。为了便于维护,我个人觉得还是为每个路由参数都设置值来得方便。这篇文章所附带的示例工程包含了不同页面上的超链接,你可以观察环境变量值是如何工作的:
From | To | 路由参数 |
Area1/Controller1/Action1 | Area1/Controller1/Action2 | asp-action="Action2" |
Area1/Controller1/Action1 | Area1/Controller2/Action1 |
asp-controller="Controller2" asp-action="Action1" |
Area1/Controller1/Action1 | Area2/Controller1/Action1 |
asp-area="Area2" asp-controller="Controller1" asp-action="Action1" |
Area1/Controller1/Action1 | Controller1/Action1 |
asp-area="" asp-controller="Controller1" asp-action="Action1" |
布局页面
区域内部的Razor视图可以使用外面的布局页面(也就是根目录下的/Views/Shared)。当然你可以为每个区域定义不同的布局页面。另外一种方法就是在外部定义公共的布局页面,然后区域内的布局页面将其作为页面布局,从而创建一个嵌套的布局页面。下面显示了Area2区域的布局页面如何使用外部布局页面(注意为了引用外部布局页面,你需要指定绝对路径):
@{ Layout = "/Views/Shared/_Layout.cshtml";
}<div><nav style="background-color: lightgray"><h2>Area2 Layout</h2></nav>@RenderBody()
</div>
源代码下载
原文:https://tahirnaushad.com/2017/08/25/asp-net-core-2-0-mvc-areas/
ASP.NET Core 2.0 系列文章目录
转载于:https://www.cnblogs.com/sanshi/p/7804857.html
[译]ASP.NET Core 2.0 区域相关推荐
- [译]ASP.NET Core 2.0 部分视图
问题 如何在ASP.NET Core 2.0中使用部分视图来重用页面的公共部分? 答案 新建一个空项目,在Startup中添加MVC服务和中间件: public void ConfigureServi ...
- [译]ASP.NET Core 2.0 网址重定向
问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter) ...
- [译]ASP.NET Core 2.0 机密配置项
问题 如何在ASP.NET Core 2.0中保存机密配置项(不用将其暴露给源代码管理器)? 答案 创建一个ASP.NET Core 2.0空项目,在项目节点上点击右键,并点击菜单项 - 管理用户机密 ...
- [译]ASP.NET Core 2.0 带初始参数的中间件
问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: public class ...
- asp.net core 3.0 更新简记
asp.net core 3.0 更新简记 Intro 最近把活动室预约项目从 asp.net core 2.2 更新到了 asp.net core 3.0,记录一下,升级踩过的坑以及经验总结,包括但 ...
- Amazing ASP.NET Core 2.0
前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...
- ASP.NET Core 2.0 : 三. 项目结构
ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...
- .NET Core ASP.NET Core 1.0在Redhat峰会上正式发布
众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...
- diskgeniusv4.4.0_.NET Core 3.0及ASP.NET Core 3.0前瞻
(给DotNet加星标,提升.Net技能) 转自:LineZerocnblogs.com/linezero/p/netcore3 前几天微软发布了< .NET Core 3.0 Preview ...
- ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...
最新文章
- 第十五届智能车竞赛芯片选型浅析
- css的padding
- 网站域名过户查询_网站建设哪家好?网站建设怎么收费?
- Spark SQL 处理流程分析 (一)
- java程序课程总结_Java课程总结报告.pdf
- 广实1592: 1.6-06:校门外的树
- 用C语言统计给定文本文件中汉字的个数
- java调用iec61850_IEC61850开发实战(三)
- Python读写Excel简单案例及调试说明文档
- qt调用SSDP协议
- vbs格式编程教程基础
- 如何提升数据化管理效率
- stm32核心板可以点亮灯吗_不忘初心牢记使命——自动化科协自行设计开发stm32仿真器...
- 基于SSM的设备租赁管理系统
- 勇者斗恶龙服务器没有响应,PC版勇者斗恶龙英雄打不开怎么办?
- 什么是 Redis ?
- 双拼、kotlin、依赖倒置
- oracle怎么赋予系统权限,讲解Oracle系统中用户权限的赋予和查看
- Android 人脸解锁
- 【halcon机器视觉教程】黑洞是什么洞?我来给你拍个照,黑洞成像系统