在ASP.NET MVC中使用Area
前言:
这段时间小猪花了不少功夫在研究ASP.NET MVC的源码上面,可谓思想是了解了不少,用的上用不上却是另外一回事了。!
应用场景:
ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的。如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所构成,因此,随着应用程序规模的增大,如何组织这些不同功能模块中的MVC三层的目录结构,有时对开发者来说显得是种负担。
另一个问题就是Controller不允許有相同命名的存在,偏偏模块中常有父子关系,有时子模块命名相同就会造成错误。
幸运的是,ASP.NET MVC允许开发者将应用划分为“区域”(Area)的概念。
Area(区域)简介:
每个区域都是按照asp.net mvc的规定对文件目录结构和类的命名规则进行命名。添加方法也很简单,右击项目,点击添加区域,在弹出框里写上Area的名称点击确定即可。
*     1、新建 Area:右键 -> Add -> Area...
	 *     2、继承 AreaRegistration,配置对应此 Area 的路由
	 *     3、在 Global 中通过 AreaRegistration.RegisterAllAreas(); 注册此 Area
	 *     4、有了 Area,就一定要配置路由的命名空间
Area的路由
在添加好了区域之后,vs会自动帮我们注册Area的路由信息:
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 { controller = "Console", action = "Login", id = UrlParameter.Optional }
);
}
}
问题
试想如果这时候有这样的情形:
如果有一个Area叫Database,在它的下面有一个Controller名字叫做Browse。
另外我在顶层也有一个Controller,名字也叫Browse。
那么我们在输入http://localhost/Browse,我们得到的将是一个异常: Multiple types were found that match the controller named 'Browse'.
而输入http://localhost/Database/Browse,我们却能够正常地访问到 MvcApplication.Areas.Database.Controllers.BrowseController。
原来:
在注册Area的路由时,如果没有填写命名空间的话,则会默认使用Area所在的命名空间。如此一来,使用Area的路由在寻找Controller时,只会在Area所在的空间下寻找相应的Controller,那就不存在与顶层Controller的冲突问题了,可是顶层的同名Controller问题如何解决呢,这个好办,在顶层路由映射的时候主动加上命名空间吧,这样子就皆大欢喜,你用你的Browse,我用我的Browse,互不相干。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },// Parameter defaults
new[] { "Web.Controllers" }// Namespaces 引入默认的命名空间
); }
让起始页为某Area的页面:
修改RoutConfig代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Console", action = "Login", id = UrlParameter.Optional }
).DataTokens.Add("area","Admin");
}
注意后面的DataTokens.Add方法!
Done!
在ASP.NET MVC中使用Area的更多相关文章
- 在ASP.NET MVC中使用Area区域
		在大型的ASP.NET mvc5项目中一般都有许多个功能模块,这些功能模块可以用Area(中文翻译为区域)把它们分离开来,比如:Admin,Customer,Bill.ASP.NET MVC项目中把各 ... 
- ASP.NET MVC中Area的另一种用法
		ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ... 
- 在ASP.Net MVC 中,如何在Global.asax中配置一个指向Area内部的默认Route
		ASP.Net MVC 中配置Route的时候可以设置一个默认的Route. 比如我要在输入http://localhost的时候默认进入http://localhost/home/index.可以在 ... 
- MVC中实现Area几种方法
		概述 ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块 ... 
- Asp.net mvc 中View 的呈现(二)
		[toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ... 
- 5. ASP.NET MVC 中的Areas【区域】是什么
		[PS返回上一篇:-->4.ASP.NET MVC 5.0 视图之模型绑定] 从ASP.NET MVC 2.0开始,微软就提供了一个新特性:Areas[区域].Areas仅仅是用来将大型程序拆分 ... 
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
		上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ... 
- 关于 ASP.NET MVC 中的视图生成
		在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ... 
- 在Asp.Net MVC 中配置 Serilog
		Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ... 
随机推荐
- LTE Module User Documentation(翻译3)——仿真输出
			LTE用户文档 (如有不当的地方,欢迎指正!) 6 仿真输出 ns-3 LTE 模型当前支持输出 PHY, MAC, RLC 和 PDCP 级别的 Key Performance Indicators ... 
- SAP 批量查看凭证更改记录
			1,在凭证上点击环境->凭证变更 查找.2,通过运行程序 SE38:RSSCD1TS 根据对象类.对象标识查找. 3,SE16N/SE16/SE11查看标准表,CDHDR(更改凭证抬头),CDP ... 
- LotteryDrawing
			import java.util.*; public class MyTest{ public static void main(String[] args){ Scanner in = new Sc ... 
- Linux设备模型(总线、设备、驱动程序和类)
			Linux设备驱动程序学习(13) -Linux设备模型(总线.设备.驱动程序和类)[转] 文章的例子和实验使用<LDD3>所配的lddbus模块(稍作修改). 提示:在学习这部分内容是一 ... 
- python操作postgresql数据库
			import psycopg2 conn = psycopg2.connect(database=") cur = conn.cursor() cur.execute("CREAT ... 
- Python内置函数filter, map, reduce
			filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当 ... 
- 转自“脚本之家”!!JDBC之PreparedStatement类中预编译的综合应用解析
			JDK 文档:SQL 语句被预编译并存储在 PreparedStatement 对象中(PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里),然后可以使用此对象多次高 ... 
- hiho_1069_最近公共祖先3
			题目 给出一棵家族树,树上的节点可以由名字唯一标识.给出若干个查询,查询的内容为两个名字,结果为两个名字的最近公共祖先. 题目链接: 最近公共祖先 分析 在线的RMQ + LCA 算法,先用dfs将树 ... 
- ActionErrors 使用说明 struts1 validate 处理流程 详细教程(转)
			转自(http://blog.csdn.net/wyx100/article/details/8736445). struts1 处理流程是 jsp --> ActionForm 中的A ... 
- java视频格式转换代码
			http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ... 
