MVC中Area的使用
2016-01-24 00:40
218 查看
1.Area是什么?
MVC 2 中引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Controller机制.
2.什么时候使用Area?
当项目复杂时,可能需要许多个Controller,View,如果有n个开发团队来开发,如果只在一个项目中创建,难出维护和管理.这时,可以考虑建立多个Area,每个Area可以由一个团队来负责,这样就将复杂的项目分配开了,开发管理起来也就方便了.
3.如何使用Area?
第一种:简单的方法:
在一个项目A中,在项目文件右击->添加->区域,输入名称,点击确定后,会自动生成一组文件.
自动生成的文件: Areas文件夹下面是区域Blog,它里面包含了完整的Controller,View,Models机制,同时需要注意的是还生成一个区域注册文件BlogAreaRegistration.cs,内容如下:
继承AreaRegistration类,重写AreaName属性,RegisterArea方法,注册一个新路由. 这样在访问 Blog/Home/Index 时,会自动定位到Blog区域中的Controller和View.
第二种: 由于第一种方法,没有完全从一个项目中剥离出新的区域,所以此方法有了改进.
在第一种解决方案中,新建一个mvc项目B,然后将两个web.config文件和Global.asax文件删除,再在项目根目录中新建一个类文件继承自AreaRegistration,重写同上一种方法.
然后将第一种方法中Blog文件夹下的Controller文件夹,BlogAreaRegistration文件删除掉
接下来,再第一个项目A中引用这个mvc项目B.
至此,达到将区域中Controller分离出来一个单独的项目, 同样访问 Blog/Home/Index 时,会生效.
不足之处, View一直是显示项目A中的View文件夹中的,如果项目B中有修改不会显示出来,只能手动复制到项目A中的View中去, 如何改进,请看第三种解决方案.
第三种: 将区域完全独立出来为一个项目.
同样在项目A中创建一个Areas文件夹,再创建一个区域文件夹,如Shopping,但其中是空的,目前没有文件.
然后新建一个项目C,同样实例Controller,View,并在根目录创建区域注册类文件(继承AreaRegistration类).
然后将项目C中的内容拷贝到Shopping目录下面,再添加现有项目到解决方案中,也就是说,将项目C中的Controller,View都创建在区域Shopping下面.
那么,如何将项目C中的生成dll被项目A引用呢?这里使用了项目属性中的"生成后事件"功能,由于此功能支持Dos命令,可以将dll文件从项目C复制到项目A的bin文件中.
至此,完成区域独立,实现复杂项目的分组开发与管理.
MVC 2 中引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Controller机制.
2.什么时候使用Area?
当项目复杂时,可能需要许多个Controller,View,如果有n个开发团队来开发,如果只在一个项目中创建,难出维护和管理.这时,可以考虑建立多个Area,每个Area可以由一个团队来负责,这样就将复杂的项目分配开了,开发管理起来也就方便了.
3.如何使用Area?
第一种:简单的方法:
在一个项目A中,在项目文件右击->添加->区域,输入名称,点击确定后,会自动生成一组文件.
自动生成的文件: Areas文件夹下面是区域Blog,它里面包含了完整的Controller,View,Models机制,同时需要注意的是还生成一个区域注册文件BlogAreaRegistration.cs,内容如下:
namespace MvcArea.Areas.Blog { public class BlogAreaRegistration : AreaRegistration { public override string AreaName { get { return "Blog"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Blog_default", "Blog/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); } } }
继承AreaRegistration类,重写AreaName属性,RegisterArea方法,注册一个新路由. 这样在访问 Blog/Home/Index 时,会自动定位到Blog区域中的Controller和View.
第二种: 由于第一种方法,没有完全从一个项目中剥离出新的区域,所以此方法有了改进.
在第一种解决方案中,新建一个mvc项目B,然后将两个web.config文件和Global.asax文件删除,再在项目根目录中新建一个类文件继承自AreaRegistration,重写同上一种方法.
然后将第一种方法中Blog文件夹下的Controller文件夹,BlogAreaRegistration文件删除掉
接下来,再第一个项目A中引用这个mvc项目B.
至此,达到将区域中Controller分离出来一个单独的项目, 同样访问 Blog/Home/Index 时,会生效.
不足之处, View一直是显示项目A中的View文件夹中的,如果项目B中有修改不会显示出来,只能手动复制到项目A中的View中去, 如何改进,请看第三种解决方案.
第三种: 将区域完全独立出来为一个项目.
同样在项目A中创建一个Areas文件夹,再创建一个区域文件夹,如Shopping,但其中是空的,目前没有文件.
然后新建一个项目C,同样实例Controller,View,并在根目录创建区域注册类文件(继承AreaRegistration类).
然后将项目C中的内容拷贝到Shopping目录下面,再添加现有项目到解决方案中,也就是说,将项目C中的Controller,View都创建在区域Shopping下面.
那么,如何将项目C中的生成dll被项目A引用呢?这里使用了项目属性中的"生成后事件"功能,由于此功能支持Dos命令,可以将dll文件从项目C复制到项目A的bin文件中.
至此,完成区域独立,实现复杂项目的分组开发与管理.
相关文章推荐
- Eclipse编辑XML文件的代码提示
- 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式
- PHP——explode的应用(获取字符串,拆为下拉列表)
- STM32中断优先级彻底讲解
- Android应用apk的程序签名详解
- RaspberryPi和Arduino温室恒温改进
- 史上最详细的Android Studio系列教程六--Gradle多渠道打包
- 【转载】PHP7革新与性能优化
- 史上最详细的Android Studio系列教程五--Gradle命令详解与导入第三方包
- 史上最详细的Android Studio系列教程四--Gradle基础
- 搭建go语言idea开发环境
- 如何从零开始搭建一个网站
- 史上最详细的Android Studio系列教程三--快捷键
- opengl es画凹多边形问题:切割凹多边形为三角形
- 史上最详细的Android Studio系列教程二--基本设置与运行
- iOS GCD使用_理解
- 对Windows下动态库和静态库的总结
- traits编程技法
- Qt 新型控件开发(总)
- 同台服务器 同端口80 用apache http server 2.063 代理多域名