在ASP.NET MVC中使用Area区域
在大型的ASP.NET mvc5项目中一般都有许多个功能模块,这些功能模块可以用Area(中文翻译为区域)把它们分离开来,比如:Admin,Customer,Bill。ASP.NET MVC项目中把各个功能分为不同Area的之后每一个Area都有独立的Controller,View文件结构。这样可以把这些功能分给不同的开发者同时开发而彼此之间不会冲突,这样的文件结构各司其职,直观明了,易于维护和管理。下面我们看看怎么在ASP.NET MVC5中创建一个Area和Area直接之间链接的处理。
一、ASP.NET MVC5中创建Area区域
选中我们的ASP.NET MVC项目,右键菜单,添加=》区域,这里我们取名为Admin,在项目根目录将会生成一个Admin文件夹,如下图:

我们来看这个Area是怎么在项目的起作用的。
我们来看Global.asax.cs的代码:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
第一行的代码:AreaRegistration.RegisterAllAreas();就是注册 ASP.NET MVC 应用程序中的所有区域。每一个区域它有自己的都有独立的Controller,View文件结构和路由配置,我们完全可以把ASP.NET MVC的区域看成一个ASP.NET MVC项目。
注意: RouteConfig.RegisterRoutes(RouteTable.Routes)在AreaRegistration.RegisterAllAreas();的后面。这一点很关键,你最好是不要改变这个顺序。之前我们谈到过ASP.NET MVC路由系统是按注册路由的先后顺序来匹配的,这里RegisterAllAreas在前面表示MVC路由系统会先去匹配Area中的路由配置规则,如果你改变了顺序可能会找到错误的Controller,发生意外的错误。
在ASP.NET MVC5的每个区域都有一个类:区域名+AreaRegistration,比如我们刚才建的一个Admin区域AdminAreaRegistration类:
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
这个类的作用主要是用于标示区域名称和区域Controller的路由,可以看到路由规则为"Admin/{controller}/{action}/{id}",前面统一跟了一个Admin。
二、在Area区域的视图之间Action的链接跳转的处理
当在ASP.NET MVC项目中使用了AreaArea区域后,会涉及到不同Area的Action链接之间相互跳转,我使用Html.ActionLink有些地方需要注意。
1、同一个Area之间跳转
在Area区域的视图中生成指向同一个Area的Action链接时,你不需要做任何处理,当你调用Html.ActionLink时MVC框架自动去找当前Area的相应路由来生成Action的链接。如下:
@Html.ActionLink("Click me", "About")
生成下面的html:
<a href="/Admin/Home/About">Click me</a>
2、不同Area之间跳转
@Html.ActionLink("Click me to go to another area", "Index", new { area = "Support" })
3、跳转到不是带Area的Action
我们知道使用Html.ActionLink没有指定area,默认就是当前的area。有时我们需要链接到顶层的Controller的Action,就是不要带area,也很简单,只需要把area传空字符串就可以了。如下:
@Html.ActionLink("Click me to go to another area", "Index", new { area = "" })
参考:https://www.lanhusoft.com/Article/217.html
在ASP.NET MVC中使用Area区域的更多相关文章
- 在ASP.NET MVC中使用Area
前言: 这段时间小猪花了不少功夫在研究ASP.NET MVC的源码上面,可谓思想是了解了不少,用的上用不上却是另外一回事了.! 应用场景: ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规 ...
- asp.net MVC 中呈现指定区域下的分部视图
Html.RenderAction() 可以呈现分部视图. asp.net MVC就是有这种好处,可以将多个子视图无缝合成到一个视图上再输出,那么开发的时候,能够进行模块化开发.看上去同属一个页面上的 ...
- ASP.NET MVC中Area的另一种用法
ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ...
- 5. ASP.NET MVC 中的Areas【区域】是什么
[PS返回上一篇:-->4.ASP.NET MVC 5.0 视图之模型绑定] 从ASP.NET MVC 2.0开始,微软就提供了一个新特性:Areas[区域].Areas仅仅是用来将大型程序拆分 ...
- 在ASP.Net MVC 中,如何在Global.asax中配置一个指向Area内部的默认Route
ASP.Net MVC 中配置Route的时候可以设置一个默认的Route. 比如我要在输入http://localhost的时候默认进入http://localhost/home/index.可以在 ...
- 在ASP.NET MVC中实现区域或城市选择
每次在"万达影城"网上购票总会用到左上角选择城市的功能.如下: 今天就在ASP.NET MVC中实现一下.我想最好的方式应该是写一个插件,但自己在这方面的功力尚欠缺,如果大家在这方 ...
- 在ASP.NET MVC中使用区域来方便管理controller和view
在ASP.NET MVC中使用区域来方便管理controller和view 在mvc架构中,一般在controllers和views中写所有控制器和视图, 太多控制器时候,为了方便管理,想要将关于pe ...
- Asp.net mvc 中View 的呈现(二)
[toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
随机推荐
- node 创建server 及加载静态页面
1.Demo.js 创建Server let http = require('http'); let url = require("url"); let util = re ...
- c——根据天数输出日期
<c语言程序设计>(第三版)何钦铭 P190 #include<stdio.h> void month_day(int year,int yearday,int *pmonth ...
- redis 远程连接出错的解决办法
1. 配置防火墙端口 redis系统的默认端口是6379端口. # 打开端口 $ firewall-cmd --zone=public --add-port=6379/tcp --permanent ...
- fixed 相对于父容器定位
当一个元素设置为 fixed 或 absolute,不设置 top, left 则会在原位置,而脱离文档流,别的元素可以存在于它之后. 而当使用 fixed 后还想相对于父容器进行定位,或者说在当前位 ...
- 第一节《Git初始化》
创建版本库以及第一次提交 首先我看查看一下git的版本,本地的git是用的yum安装方式,如果想使用源码安装请参考官方文档. [root@git ~]# git --versiongit versio ...
- POI导出Execl文件,使JAVA虚拟机OOM
由于在项目中使用POI导出execl,导致JAVA虚拟机OOM,采用以下方式解决问题: 原先方式: g_wb = new XSSFWorkbook(sourceFile.getInputStream( ...
- R随机森林交叉验证 + 进度条
library(data.table) library(randomForest) data <- iris str(data) #交叉验证,使用rf预测sepal.length k = 5 d ...
- 活学活用wxPython基础框架
看活活用wxpython这本书,基本框架是这样子的,这里有定义输出,然后打印出整个流程,可以看到是怎样执行的,明天请假了,五一回去玩几天,哈哈,估计假期过来都忘了 import wx import s ...
- JavaScript中的匿名函数遇上!会怎么样
通常,我们声明一个函数test){},可以通过test()来调用这个函数.但是,如果我们在这个函数声明的末尾加上(),解析器是无法理解的. function test(){ console.log(' ...
- reids高可用(灾难备份-持久化)
java缓存存放到内存之中,当服务器重启以后,内存的数据将丢失,而reids作为缓存,重启reids以后 数据是不是也会丢失,redis服务器重启以后数据也不会丢失,这个是redis提供了持久化的功能 ...