在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. 解决IE8下载停留在99%的脚本
  3. undefined reference to `cv::VideoCapture::VideoCapture()'
  4. 谁敢花35万再加盟瑞幸?
  5. java调度问题的贪心算法_java代码,多机调度问题,怎么解释
  6. android自定义View之仿携程首页点击缩放ImageView
  7. SRNTT:Image Super-Resolution by Neural Texture Transfer
  8. OrCAD图文教程:把一个元件分多个部分画出来
  9. 国产芯片WiFi物联网智能插座—电源功能设计
  10. 数据库(MySQL)基础快速入门!
  11. 程序带来这些新的机会,创业新浪潮才刚开始!
  12. JDBC(Java数据库连接)
  13. Android 中Fragment之间传递数据
  14. 深度链接、延迟深度链接、App Links以及关于LinkedME实现深度链接的原理解析
  15. 解决:Mac “微信”意外退出
  16. 缓存的那些应用场景,你都清楚吗?
  17. senseTime,FaceU人脸识别技术
  18. html文件如何设置为桌面壁纸,怎样把文件里的图片设置为桌面背景时全部是全屏图?最好详细一点的。...
  19. 快速传超大文件的解决方案
  20. java趣味程序 五猴分桃_趣味数学及编程拓展epub

热门文章

  1. MPLS virtual private network 地址重叠实验(华为设备)
  2. C++ 从入门到入土(English Version)Section5: Real numbers + bitwise operations
  3. ansible 第三次作业
  4. 理解Cookie,Session,Token
  5. 求1--100的和 Python3实现
  6. leetcode 27 移除元素 (python)
  7. 解析Health端点数据获取异常数据
  8. ijkplayer框架详解
  9. checking for tgetent()... configure: error: NOT FOUND!
  10. java中实现多线程的两种基本方法