• Area区域


    mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候,能够减少互相冲突的机会。

     
    在mvc专案中不能有两个同名的控制器,即使你有区分不同的命名空间可以正常编译,但实际上在运行时仍然出错,除非在app_start/RouteConfig文件中通过mapRoute方法新增网址路由的设置,并明确指定命名空间,才能让此功能正常运行。
    eg
    routes.MapRoute(
    name:"订单系统",
    url:"Orders/{controller}/{action}/{id}",
    defaults:new { controller = "member" action="index" ,id=UrlParameter.Optional},
    namespaces:new string[]{"MvcApplication1.Controllers.订单系统"}
    );
    routes.MapRoute(
    name:"会员系统",
    url:"Members/{controller}/{action}/{id}",
    defaults:new { controller = "member" action="index" ,id=UrlParameter.Optional},
    namespaces:new string[]{"MvcApplication1.Controllers.会员系统"}
    );
     
    但是如果网站真的很大,也许控制器都好几十个文件,这样不断维护下去,网站就会越来越复杂,失去了关注点分离的好处,mvc项目如果在网站独立性很高的情况下,通常会拆分为不同的项目来开发,但在管理上会变得比较麻烦,例如在不同的项目中会有重复定义的web.config属性,部署的复杂度增加。
     
    也因为有这样的需求,在2.0中mvc就提供了area机制,可以在同一个项目内就能够切分不同的mvc网站,且每一个子网站都会有完整的mvc目录结构在开发商就像是区分成不同的mvc网站一样
     
    如何在现有项目中新增区域
    项目上单击右键 添加 --》区域
     
     
    如何设置区域的网址路由
    在每一个区域目录下都会有一个[AreaName]AreaRegistration.cs文档
    例如刚新增一个a区域,那么就会有一个aAreaRegistration.cs,此文档就如同在app_start/routeConfig.cs一样
    来定义网址路由。
    aAreaRegistration.cs里面这个类集成了AreaRegistration抽象类,并替换一个AreaName属性用来指定这个区域的名称,另外替换一个方法名为RegisterArea,这个的属性与app_start/routeConfig.cs中的RegisterRoutes方法如出一辙。
     
    默认路由与区域路由的优先级
    在网站根目录下的Global.asax中的Application_Start()方法中会看到的AreaRegistration.RegisterAllArea();这行默认的程序代码
     
    其中第一行 AreaRegistration.RegisterAllAreas()就是讲区域的路由注册金RouteTable.Routes,"先注册先赢"
    如果在a区域的aAreaRegistration.cs定义了某个网站路由,而在网站根目录下的Global.asax也注册了相同规则的话,最后比对成功的规则将会是区域的路由。
     
     
    如何制定默认网站与区域网站的链接
    在mvc中有三个默认的RouteValue名称,分别是控制器,action,area,其中控制器和action参数是必要参数,缺一不可, 剩下的区域这个RouteValue就是当需要特别制定到区域的时候才必须加上的。
    以Html.ActionLink()为例,(Url.Action的用法一样)
     
    若要生成指定的a区域下Member控制器的Index动作,可使用以下语法,只要额外加一个区域路由值就可以
    @Html.ActionLink("会员订单",“Index”,new { controller="Member",area="a"})
     
    如果要用Html.Action辅助方法来装入部分监视属性,
    @Html.Action("aDetail","Member",new {area="a"})
  • 相关阅读:
    让GoogleCode的SVN下的HTML文件在FireFox下正常显示
    添加验证控件出错
    【转载】SQLServer中char、varchar、nchar、nvarchar的区别:
    人生第一篇博客
    二叉排序树
    最小编辑距离
    面试题集锦_4
    面试题集锦_3
    键树
    B树
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4597711.html
Copyright © 2020-2023  润新知