MVC本身提倡的就是关注点分离。但是当项目本身的业务逻辑足够复杂,如果所有的业务逻辑都写个Controller文件夹下面的时候,你会看到非常庞大的各种命名的Controller,这个时候区域的作用就非常明显了,将不同的模块通过区域加以区分,简单明了。

添加区域: 
新建的MVC工程是没有区域的。点击项目右键->添加->区域,输入区域名称。.net会自动在项目下添加“Areas”文件夹,并在该文件夹下创建对应的区域的文件夹。创建一个“test”的区域,在区域下添加控制器“default”,将“default”控制器内容改为:

[RouteArea("test")]
[RoutePrefix("default")]
public class Default1Controller : Controller
{
[Route("index")]
public ActionResult Index()
{
return View();
}
}

注册路由:

MVC项目创建后悔自动生成文件“Global.asax”文件。找到Application_Start函数中的RouteConfig.RegisterRoutes(RouteTable.Routes).进入RegisterRoutes,在其中添加代码 routes.MapMvcAttributeRoutes()

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes();//注册属性路由 routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}

删除AreaRegistration:

当你创建新的区域时,工程会自动在区域下创建AreaRegistration。比如创建default控制器后,test区域的文件夹下会自动生成“testAreaRegistration.cs”,这个文件是MVC5以前的版本用来注册路由的。在MVC5中由于在Global.asax注册了属性路由,所以可以直接把这个文件删了,否则也会出现找不到路由的错误。内容大致是:

 public class testAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "test";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"test_default",
"test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}

然后就可以直接通过路由的方式访问Areas中的控制器了:

<a class="btn btn-default" href="/test1/default/index">test &raquo;</a>

最新文章

  1. Cache的使用
  2. paas架构之docker——安装
  3. android JNI调用(转)
  4. using详解(C#)
  5. CentOS 6.4安装本地yum源,并安装X Window System
  6. memcachedb-持久化存储的缓存系统
  7. 转:关于视频H264编解码的应用实现
  8. git的安装已经连github
  9. python学习day8
  10. web 开发规范
  11. MTU &amp; MSS 详解记录(转)
  12. chapter 12_2 保存无环的table
  13. Django项目及应用的创建
  14. RESTEASY ,从学会使用到了解原理。
  15. [quartz] - Cron表达式举例
  16. Linux下Mongodb安装和启动配置 原
  17. centos7配置svn钩子hooks脚本自动同步代码到项目目录
  18. [转]如何在本地apache上架设多个站点
  19. react native 学习之 native modules
  20. ios 为什么拖拽的控件为weak 手写的strong

热门文章

  1. Ubuntu ssh的使用
  2. AMD 规范以及如何将AMD转变为CommonJS
  3. 字符串格式化 String.format() 案例
  4. css 实现文字过长变成省略号(包含单行的and多行的)
  5. 使用__doPostBack函数来达到使用客户端的控件来调用服务器端的函数的--小结
  6. ASP.NET中的MD5加密
  7. 告诉你GetDC()没有释放造成的后果
  8. 单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析
  9. Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能
  10. Yum 安装 zabbix...