在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  

转载于:https://www.cnblogs.com/ldyblogs/p/controller.html

MVC4 中使用 Area 和 注意的地方相关推荐

  1. Asp.net MVC 4新项目中创建area的后续操作

    Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具 ...

  2. 【转】Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

  3. Autofac3 在MVC4中的运用原理

    这是一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你的某个实现流出一个注入点,你生产的对象,可以根据你之前的配置进行组合.  IOC全称是Inversion o ...

  4. 为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开?

    为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开? 2014-11-09 20:20147****3349 | 浏览 448 次  操作系统 在同一个电脑里,在mat ...

  5. mvc4 html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例

    本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...

  6. mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例

    本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...

  7. MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件

    场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条. 解决:自定义jquery控件 没有解决:非图片上传时,会有浏览样式的问题; 解决方案; 1.样式 – bootstrap 的css和 ...

  8. 使用asp.net MVC4中的Bundle遇到的问题及解决办法

    背景 之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC ...

  9. 在ASP.NET中值得注意的两个地方

    在ASP.NET中ASPX页面的Page_Load事件有两个让人奇怪的地方,你应该记住它们: a.有时Page_Load事件在你的ASP.NET页面里会发生多次.这种情况发生的一个可能的原因是你把AS ...

  10. ASP.NET MVC4中调用WEB API的四个方法

    当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...

最新文章

  1. 威胁生存!科学家警告灾难性“气候临界点”已逼近
  2. 乒乓球比赛赛程_国乒今年最后一站比赛延期!赛程缩短比赛地温暖,教练组考察队员...
  3. 普通卷积armv7-neon指令集实现—QNNPACK
  4. CodeForces 1131G. Most Dangerous Shark
  5. 将SSM架构中原来关于springSecurity3.x版本的写法配迁移到SpringBoot2.0框架中出现的问题解决记...
  6. Checksum 校验和
  7. Fixjs实践——标签、按钮控件
  8. Python密码强度判断
  9. 神经网络学习小记录53——TF2搭建孪生神经网络(Siamese network)比较图片相似性
  10. 3dmax:3dmax三维VR渲染设置(【DMC采样器】、【Vray默认置换】、【Vray系统】、【Vray日志】、杂项选项、灯光属性)之详细攻略
  11. php汉字utf8编码转换,PHP UTF8编码内的繁简转换类
  12. 【定时自动清理磁盘空间】
  13. 家庭收支记账软件项目【Golang-面向对象】
  14. 均匀分布的期望和方差的推导_概率论中均匀分布的数学期望和方差该怎么求啊?...
  15. 化繁为简,远光天擎助你一键云部署
  16. 溢出英语计算机,查看溢出(简述计算机溢出原理)
  17. 不情愿的守门人:关于全栈开发者的迷思
  18. 关于耳机与电脑连接断断续续问题的解决办法
  19. TOOL 一个裴蜀定理解析器
  20. 机器人砂型铸造_启东精密砂型铸造

热门文章

  1. LNMP详解(十六)——Nginx日志切割
  2. Redis详解(六)——Redis主从同步原理与配置
  3. ubuntu18.04 下安装搜狗输入法
  4. WPA3 标准被曝严重漏洞,WiFi 密码可遭窃取?
  5. [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
  6. 多目标决策---多目标线性规划的解法
  7. Python标准库:内置函数ascii(object)
  8. 《树莓派开发实战(第2版)》——1.2 封装树莓派
  9. [傅里叶变换及其应用学习笔记] 二十二. 快速傅里叶变换
  10. RoundedUITableView