MVC项目开发中那些用到的知识点(Asp.Net Mvc3.0 Areas)

前言

   我们知道MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等。但是在实际的开发中,随着项目规模的不断扩大,Controller控制器也随之不断增多。如果在Controllers文件夹下面有超过两位数controller,即便采用良好的命名规范,或者用子文件夹的形式区分不同功能的控制器,还是会影响项目的可阅读性和可维护性。因此,在一些场景下,如果能把与某功能相关的文件分离到一个独立的项目中是非常有用的。Asp.Net MVC提供了Areas(区域)的概念达到这一目的。

  Web应用通常会有前台(面向用户)和后台(面向管理员)两部分,我们希望以/locahost/Admin开始的URL都为后台管理地址,

routes.MapRoute(    //Default Route

    "Default", // Route name

    "{controller}/{action}/{id}", // URL with parameters

    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

);

  这是默认的路由,我们希望后台可以通过这里的Url访问,比如:localhost/Admin/{Controller}/{Action},那么我们可能就需要添加这样一个路由

routes.MapRoute(    //Admin Route
    "Admin", // Route name
    "Admin/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Index", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

  但是我们如何在项目中使用呢……

正题

 第一步我们需要在Web项目中添加一个区域,就是本次记录的重点

我们将区域名称命名为Admin,点击确定后就会生成如图所示的几个文件和文件夹,当然是已Areas为根文件夹

我们打开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 { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

  系统为其自动添加了一个路由,也正是我们想要的,于是,我们便也添加了测试的AdminController,视图View Index.

直接F5运行,然后通过Url访问

那现在我们再添加一个HomeController的控制器,和Index的视图,再次运行看看

这种情况需要修改一下AdminAreaRegistration.cs和Global.asax,分别为路由加上命名空间限制:

/Areas/Admin/AdminAreaRegistration.cs

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new string[] { "MvcArea.Areas.Admin.Controllers" }
            );
        }

  /Global.asax.cs

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // 路由名称
                "{controller}/{action}/{id}", // 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }  , // 参数默认值
                new string[] { "MvcArea.Controllers" }
            );

        }

总结

  这样,我们就可以把所有与后台管理相关的Controller和View文件放到/Areas/Admin下面,以此类推,可以添加诸如会员(Member),博客(Blog),论坛(Forum)等多个Areas。各部分都有自己的顶层文件夹,物理文件都分离开来,管理起来比较方便。

这种方式已经有了很大提高,但是所有的文件还是放在同一个项目里面。当项目规模较大的时候,比较好的开发方式是将不同功能模块按需要独立到不同项目里面,最后再整合成一个整体。这样,每一个项目可以独立开发,测试和发布。至于进而的优化,我会抽时间继续补上的。

示例代码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏字根中文校对软件

Url排重Bloom Filter 算法、误差及其他

fly with me , in the perfect world --- 题记

14130
来自专栏米扑专栏

Python 发送 email 的三种方式

Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法

24330
来自专栏机器人课程与技术

2015-2018机器人操作系统(ROS)及其应用暑期学校资料汇总 ROS Summer School 持续更新

2018年ROS暑期学校报名链接:http://www.huodongxing.com/go/ros2018

27240
来自专栏Java开发必知必会

Junit5系列-Junit5中assertThrows()与assertDoesNotThrow()方法详解

Junit5中新添加了对方法抛出异常的断言Assertions类中的assertThrows()和assertDoesNotThrow(),使用此方法可以对被测...

51060
来自专栏信数据得永生

米斯特白帽培训讲义(v2)实战篇 迅雷 CMS

起因是这样,我们随便找了一个网站,访问后台登录页面(/admin/login.asp),然后使用弱密码admin:admin进了后台(/admin/index....

14360
来自专栏信数据得永生

米斯特白帽培训讲义(v2)实战篇 捷达系统

这个东西仍旧是闭源的,我们使用它的演示站点,http://demoerp.jeedaa.com来进行演示。

9930
来自专栏信数据得永生

米斯特白帽培训讲义 实战篇 南方 0day

我们打算检测其中的 SQL 注入漏洞,由于 ASP 代码基本没有什么好的过滤,一般一查一个准。为了搜索 SQL 注入漏洞,我们可以使用sql、conn这类名称、...

14850
来自专栏字根中文校对软件

RSS的发展历史简单回顾

    作者:田春峰     链接:http://blog.csdn.net/accesine960/archive/2005/03/05/312308.asp...

16050
来自专栏钱塘小甲子的博客

绕过JS写爬虫

      最近要把很多数据抓下来先存起来,现有历史数据再说。其中,东方财富网有许多数据,其中有一个是机构调研的数据。

21820
来自专栏字根中文校对软件

微软新产品连接

一些第三方工具 Yukon 的下载地址 SQL Server大型服务器:伸缩性、可用性与易管理性

9130

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励