背景资料:

随着业务的需要,结构需求越来越多,View文件夹下的文件夹也越来越多,又或者需要更改结构的页面路径,另外可能是多个人合作开发,有多个WEB项目需要合并在一个网站中访问。

用Areas可以解决上述问题,在项目中新建一个区域,就好像应用了另外一个项目一样,可以理解为当前项目的子项目,其本质就是一个子文件夹。就好比使用Area之前是把所有的文件夹放到一个文件夹中,使用了Area就相当于使用了子文件夹来进行管理,这样,Areas就可以将复杂的网站模板化,有利于页面的规范。

但是Areas又带来了另外一个问题:在同一个解决方案中使用多个Area,会造成程序的耦合性大大增加,当多个开发人员合作的时候,由于开发人员的能力参差不齐,经常会产生一个Area中的某个功能修改后,影响到了另一个Area,而且项目编译后,bin目录下只会产生一个此项目本身的DLL,这样是非常不好的。如果能将某些Area分离出来自成一个项目,单独进行修改,单独对其更新DLL,那就太棒了!本文就是要用简单的案例演示这个功能。

新建一个MVC项目,并且增加一个区域,命名为Report,如下图所示:

在Report区域中随便加个Control , View ,Model,反正是用来测试的,我添加的功能十分简单,就是在页面上显示一串字符串而已,如下图所示:

Model中的代码如下图所示:

Control中的代码如下图所示:

View中的代码如下图所示:

因为功能比较简单,在浏览器中输入路由路径,功能显示没有问题,如下图所示:


接下去我要将Report区域分离出来,首先,再新建一个MVC项目,命名为Report,如下图所示:

删除Report区域中其他文件,并且将WebApplication中Report区域下的ReportAreaRegistration文件复制到Report项目中,并去掉路由注册的代码,重复的路由注册会报错 ,Report项目的目录如下图所示:

ReportAreaRegistration.cs文件中的代码如下图所示:

将 WebApplication中Report区域下的Control文件和Model文件剪切到 Report中,View文件不需要剪切,如下图所示:

修改OneViewModel中的命名空间,如下图所示:

修改ReportOneControl中对OneViewMode引用的命名空间,如下图所示:

修改OneView中对OneViewModel引用的命名空间,如下图所示:

重新编译Report项目生成Report.dll后, WebApplication1项目引用Report.dll,如下图所示:

到这里已经完成了,Report相关的model 和 control代码已经剥离了,运行后结果和原来一样:

至于 AreaRegistration 的原理,目前还在研究中,感觉路由是跟命名空间有关系的,只要在同一命名空间下Control,即便被剥离出源项目,还是能引用到的。以下是摘抄来的一段话:AreaRegistration类型会将其所在的命名空间保存在DataTokens["Namespaces"]中,在接收请求的时候就只会在这些命名空间或子空间中寻找controller,如果命名空间写错了,当然就无法识别了。因此实际上area注册仅仅起到的作用是,将area的名字和命名空间关联起来。因此如果要导航area中的controller必须首先提供area名字,这样就不会找到其他命名空间下的controller了,它必须先去找你的area名字,它的机制是这样的。

ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发相关推荐

  1. npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法

    asp.net mvc利用NPOI导入导出Excel 导出Excel 2003没有问题,导出Excel2007老是出现无法访问已关闭的流,请帮忙解决,或是哪位有mvc导入导出excel的工具类能提供, ...

  2. 5. ASP.NET MVC 中的Areas【区域】是什么

    [PS返回上一篇:-->4.ASP.NET MVC 5.0 视图之模型绑定] 从ASP.NET MVC 2.0开始,微软就提供了一个新特性:Areas[区域].Areas仅仅是用来将大型程序拆分 ...

  3. 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链 (转)

    你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你的服务器带宽.下面这种方法可以告诉你如何在ASP.NET MVC中实现一个自定义Ro ...

  4. [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证

    很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...

  5. asp.net mvc 利用过滤器进行网站Meta设置

    过去几年都是用asp.net webform进行开发东西,最近听说过时了,同时webform会产生ViewState(虽然我已经不用ruanat=server的控件好久了 :)),对企业应用无所谓,但 ...

  6. mvc npoi导出excel ajax,ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// /// 批 ...

  7. [ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面

    随着最终用户对用户体验需求的不断提高,实际上我们很多情况下已经在按照桌面应用的标准来设计Web应用,甚至很多Web页面本身就体现为一个单一的页面.对于这种复杂的页面,我们在设计的时候不可以真的将所有涉 ...

  8. ASP.NET MVC 利用Razor引擎生成静态页

    实现原理及步骤: 1.通过ViewEngines.Engines.FindView查找到对应的视图,如果是部分视图,则用:ViewEngines.Engines.FindPartialView: 2. ...

  9. 基于ASP.NET MVC 利用(Aspose+Pdfobject.js) 实现在线预览Word、Excel、PPT、PDF文件

    详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak VS2010版本以及以上版本源码下载 ...

最新文章

  1. Template Method(模板方法)模式
  2. mysql.sock的作用
  3. Zookeeper的命令
  4. Python中使用高德API实现经纬度转地名
  5. Document Builder: Error message No virus scan provider available for scanner group CXP_VSCAN
  6. 【操作系统】进程与程序的比较
  7. 翁恺老师C语言学习笔记(七)函数
  8. access抓取数据_十年数据库流行度,哪款是你的最爱
  9. mysql索引数据结构图解_干货:mysql索引的数据结构
  10. springBoot读取配置信息之Properties
  11. top 显示按照内存、CPU排序
  12. 四两拨千斤的工作小工具分享
  13. Arduino PS2手柄小车代码
  14. 操作系统面试题(史上最全面试题,精心整理100家互联网企业,面试必过)
  15. 如何打断制图中的CAD图形?
  16. html5把六张图片做成立方体,html5 3D旋转的图片立方体代码
  17. 织梦网站如何设置404错误页面?
  18. Win10如何开启并新建虚拟机?
  19. 解决win7提示不是正版的问题
  20. java内存模型浅析_浅谈java内存模型

热门文章

  1. 【心随笔】叙述你成功完成一件事情的方法
  2. Windows 8.1 升级到专业版
  3. 一年Java经验应该会些什么
  4. 分享朋友圈QQ空间需要哪些参数
  5. Intellij IDEA展示类中的方法树形结构
  6. dubbo简易监控中心安装
  7. window安装gcc编译器
  8. Node.js 异步编程之 Callback介绍
  9. 首席架构师徐海峰眼中的架构和出色的架构师
  10. wifi信号手机测试软件,专业的WiFi检测工具有哪些?如何解决wifi信号不好?