zoukankan      html  css  js  c++  java
  • MVC下使用Areas

    (一) 为什么要分离

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

    (二) 新建一个项目

      新建一个项目:文件->新建->项目->名称“ Sol_Test_Code”

      

      选择MVC

      新建控制器“HelloWorld”

      

      修改代码:

    public class HelloWorldController : Controller
        {
            // 
            // GET: /HelloWorld/
    
            public string Index()
            {
                return "This is my default action...";
            }
    
            // 
            // GET: /HelloWorld/Welcome/ 
    
            public string Welcome()
            {
                return "This is the Welcome action method...";
            }
        }
    

      

    执行调试(Ctrl+F5):结果如下

      

     然后在项目上右键->添加->Areas,输入"Admin",并新建控制器“HelloWorld”  图如下:

      

    修改HelloWorld控制器代码:

    namespace Sol_Test_Code.Areas.Admin.Controllers
    {
        public class HelloWorldController : Controller
        {
    
            public string Index()
            {
                return "This is my Admin default action...";
            }
    
            // 
            // GET: /HelloWorld/Welcome/ 
    
            public string Welcome()
            {
                return "This is Admin the Welcome action method...";
            }
        }
    }
    

     执行调试(Ctrl+F5):结果如下

      

    但是此时,若是执行http://localhost:20839/helloworld,就会报错,结果如下

      

     此时应该调整AdminAreaRegistration.cs 和RouteConfig.cs代码

    AdminAreaRegistration.cs 修改如下:  

     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 },
                    new string[] { "Sol_Test_Code.Areas.Admin.Controllers" }
                );
            }
    

      

     RouteConfig.cs修改如下:

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new
                    {
                        controller = "Home",
                        action = "Index",
                        id = UrlParameter.Optional
                    }
                    //,namespaces: new[] { "Sol_Test_Code.Controllers" }             
                );
            }
    

     执行调试(Ctrl+F5):结果如下 

      

     

      至此已完成!

  • 相关阅读:
    VirtualBox设置共享文件夹和镜像访问的方法
    虚拟机文件越来越大解决方案
    linux磁盘清理方法 Linux 下垃圾清理工具 BleachBit
    linux上怎么切换不同版本的arm-linux-gcc?只需改一行函数
    windows桌面添加右键环境
    各种机械键盘轴的差别,究竟什么轴好
    XML是什么,它能够做什么?——写给XML入门者
    MATLAB中导入数据:importdata函数
    理解ThreadLocal
    Leetcode:best_time_to_buy_and_sell_stock_II题解
  • 原文地址:https://www.cnblogs.com/hyshareex/p/10330532.html
Copyright © 2011-2022 走看看