MVC 添加Area
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰。
步骤如下:
项目 –> 添加 -> 区域 ( Area )
输入 Admin
添加成功后
Area包含:
创建一个空MVC工程结构类似,Admin Area 有自己的 Controllers、Models 和
Views 文件夹,不一样的地方就是多了一个 AdminAreaRegistration.cs
文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:

根目录可以放一套一样的结构用来做前端开发使用,而admin 目录一般会作为管理员后台来开发!
AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:
namespace MvcApp4.Areas.Admin
{
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 = "home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //指定该路由查找控制器类的命名空间
);
}
}
}
在这里需要注意需加入 Areas 所在的命名空间,来控制 controllers 接收的参数,不然访问会出现错误,往下一点会提到。
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }
AreaRegistrationContext 类的 MapRoute 方法和 App_Start-> RouteConfig.cs 的 MapRoute 方法的使用是一样的,只是区分Area 目录下的路由控制!
在 Global.asax 中的 Application_Start 方法会自动加了这样一句代码
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
调用 AreaRegistration.RegisterAllAreas 方法让MVC应用程序在启动后会寻找所有继承自 AreaRegistration 的类,并为每个这样的类调用它们的 RegisterArea 方法。
下面我们来做一个 Demo
新建两个访问连接,内容都是一样,都是简单输出一个 "hello World"
URL定位到 (areas/admin)
http://localhost:18291/Admin/Home/Index
URL定位到(根目录)
http://localhost:18291/Home/Index
public class HomeController : Controller
{
//
// GET: /Admin/Home/ public ActionResult Index()
{
return Content("hello world");
} }
如果刚才没有加入:
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }
运行后就会出现如下错误:

但是如果我们把根目录下的 /Home/Index 的内容输出改成 “Root Say hello World” , 你会发现还是输出 “ hello World ”,
这是就是 Controller的歧义问题
这就是我们需要注意的另一个地方
我们需要在App_start下的 RouteConfig.cs 也要增加一个 namespaces 来声明 Controller 访问的命名空间!
//App_start下的 RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApp4.Controllers" }//指定该路由查找控制器类的命名空间 controllers
);
}
}
//areas 下的 \Admin\AdminAreaRegistration.cs
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 = "home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //对应的命名空间的 controllers
);
}
}
这样访问时就可以区分 , 不同目录的 controller
MVC 添加Area的更多相关文章
- MVC添加Area出现“到多个与名为“Home”的控制器匹配的类型的解决方法”
新建MVC项目,添加HomeController,然后添加名字为Admin的Area后,新建HomeController.这个时候,运行项目会出现以下错误: 解决办法如下: 打开网址下面的HomeCo ...
- ASP.NET MVC中Area的另一种用法
ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ...
- MVC 插件化框架支持原生MVC的Area和路由特性
.NET MVC 插件化框架支持原生MVC的Area和路由特性 前面开放的源码只是简单的Plugin的实现,支持了插件的热插拔,最近晚上偶然想到,原生的MVC提供Areas和RouteAtrribut ...
- MVC中Area的使用
1.Area是什么? MVC 2 中引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Contr ...
- ASP.NET MVC 创建 Area 以及使用
此博客全乘抄袭,只为以后自己能再次用到 参考链接 http://www.cnblogs.com/willick/p/3331519.html ASP.NET MVC允许使用 Area(区域)来组织We ...
- ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块
之前的My Blog提供了列表的展示和文章显示功能,但是所有数据仍然只能通过数据库录入,为了完成最初的角色“作者”的用例,本章将介绍如何使用“Area”实现My Blog的管理功能. 根据功能分离代码 ...
- MVC中Area的另一种用法
[摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{action}", new { }, n ...
- Asp.net MVC 基于Area的路由映射
对于一个较大规模的Web应用,我们可以从功能上通过Area将其划分为较小的单元.每个Area相当于一个独立的子系统,具有一套包含Models.Views和Controller在内的目录结构和配置文件. ...
- mvc添加多条数据到数据库
from : http://www.th7.cn/Program/net/201502/387849.shtml mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点 ...
随机推荐
- HTML之JS学习
提示篇 function fun(){ var is = confirm('选择对话框');/*确定取消对话框*/ if(is == true){ document.write('真');/*网页输出 ...
- java 枚举的简单应用。
枚举,就是保存着原始的<key,value> 在代码中会经常用到.为了不坑自己,记录一下笔记 package com.fortunedr.common.constant; public e ...
- SQL 一条记录的的两个字段值相同与不同的查询
select * from (select xm,je from table) a , (select xm01,je01 from table) bwhere a.xm = b.xm01and a. ...
- 机器学习——利用K-均值聚类算法对未标注数据分组
聚类是一种无监督的学习,它将相似的对象归到同一簇中.它有点像全自动分类.聚类方法几乎可以应用到所有对象,簇内的对象越相似,聚类的效果越好. K-均值(K-means)聚类算法,之所以称之为K-均值是因 ...
- MyBatis源码分析(3)—— Cache接口以及实现
@(MyBatis)[Cache] MyBatis源码分析--Cache接口以及实现 Cache接口 MyBatis中的Cache以SPI实现,给需要集成其它Cache或者自定义Cache提供了接口. ...
- Python连接MySQL
win10.Python2.7.Pycharm import MySQLdb conn = MySQLdb.Connect( host = '127.0.0.1', port = 3306, user ...
- mysql基于“报错”的注入
报错是如何转为xss的? mysql语句在页面报错,泄露信息 ===================================================================== ...
- 移动端城市选择JavaScript插件(基于WG的城市选择插件的修改版本)
周末的时候趁着一次机会,拿WG(博客)开发的城市选择插件改了一个移动端可以直接用的城市选择插件. 原版插件是基于原声JavaScript写的,在此先感谢作者. 我做的只是依照肯德基注册会员的页面的交互 ...
- 记录vmware虚拟机安装的时候一些注意
1.选择从哪里安装操作系统的时候,要选择第三项过一会安装,不要选择第一项. 2.点击开始三角形的时候,选择中文安装或者英文安装,但键盘布局要选择USA,美国. 3.安装vmwaretools的时候,执 ...
- Java 解决约瑟夫问题
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称“丢手绢问题”.) 有这样一个故事,15个教徒和15个非教徒在深海遇险必须讲 ...