asp.net mvc项目自定义区域

前言

直接上干货就是,就不废话了。 使用场景:分离模块,多站点等~~

一、分离模块

自定义视图引擎,设置视图路径格式 项目结构图

1.Code: 在Global.asax Application_Start方法中添加自定义的视图引擎

        using System.Collections.Generic;
        using System.Web.Mvc;
        namespace MvcProjectMain.AreasViewEngine
        {

            /// <summary>       
            /// 自定义视图引擎
            /// </summary>
            /// <remarks>
            ///  ViewEngines.Engines.Add(new MvcProjectMain.AreasViewEngine.ThemableRazorViewEngine());
            /// </remarks>
            public class ThemableRazorViewEngine : VirtualPathProviderViewEngine
            {
                //所有区域分离到Modules文件夹,{2}为区域名
                public ThemableRazorViewEngine()
                {
                    ViewEngines.Engines.Clear();
                    AreaViewLocationFormats = new[]
                    {
                    "~/Modules/{2}/Views/{1}/{0}.cshtml", 
                    "~/Modules/{2}/Views/Shared/{0}.cshtml",
                    };

                    AreaMasterLocationFormats = new[]
                    {
                    "~/Modules/{2}/Views/{1}/{0}.cshtml", 
                    "~/Modules/{2}/Views/Shared/{0}.cshtml",
                    };

                    AreaPartialViewLocationFormats = new[]
                    {
                    "~/Modules/{2}/Views/{1}/{0}.cshtml", 
                    "~/Modules/{2}/Views/Shared/{0}.cshtml", 
                    };

                    ViewLocationFormats = new[]
                    {
                    "~/Views/{1}/{0}.cshtml", 
                    "~/Views/Shared/{0}.cshtml",
                    };

                    MasterLocationFormats = new[]
                    {
                    "~/Views/{1}/{0}.cshtml", 
                    "~/Views/Shared/{0}.cshtml", 
                    };
                    PartialViewLocationFormats = new[]
                    {
                    "~/Views/{1}/{0}.cshtml", 
                    "~/Views/Shared/{0}.cshtml", 
                    };

                    FileExtensions = new[] { "cshtml" };
                }

                protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
                {
                    string layoutPath = null;
                    var runViewStartPages = false;
                    IEnumerable<string> fileExtensions = base.FileExtensions;
                    return new RazorView(controllerContext, partialPath, layoutPath, runViewStartPages, fileExtensions);
                }

                protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
                {
                    string layoutPath = masterPath;
                    var runViewStartPages = true;
                    IEnumerable<string> fileExtensions = base.FileExtensions;
                    return new RazorView(controllerContext, viewPath, layoutPath, runViewStartPages, fileExtensions);
                }
            }
        }

2.Code:在Global.asax中添加注册区域-->AreaRegistration.RegisterAllAreas();

        public class ThemesAreaRegistration : AreaRegistration
            {
                public override string AreaName
                {
                    get
                    {
                        return "MvcProjectThemes";
                    }
                }

                public override void RegisterArea(AreaRegistrationContext context)
                {
                    context.MapRoute(
                        "MvcProjectThemes",
                        "MvcProjectThemes/{controller}/{action}/{id}",
                        new { controller = "Home", action = "Index", id = UrlParameter.Optional, },
                        namespaces: new string[] { "MvcProjectThemes.Controllers" }
                    );
                }
            }

3.Code:注册主项目MvcProjectMain的路由 RouteConfig.RegisterRoutes(RouteTable.Routes);

namespace MvcProjectMain
{
    public class RouteConfig
    {
        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 string[] { "MvcProjectMain.Controllers" }
            );
        }
    }
}

最后

主要代码就是步骤1中的ThemableRazorViewEngine.cs类。自定义查找路径,其他的都是MVC的基础知识了,不懂自行查阅资料

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程思想之路

Android6.0源码分析之View(一)

目前对于view还处于学习阶段,本来打算学习结束之后再写一篇进行总结,但是发现自己自制力太差,学习效率太低,所以在此,边学边写博客,不仅督促自己完成对view的...

1948
来自专栏IMWeb前端团队

sublime的colorscheme

想让 markdown 高亮,找了点插件,比如 https://github.com/jonschlinkert/sublime-markdown-exten...

2198
来自专栏Windows Community

New UWP Community Toolkit - ImageEx

概述 UWP Community Toolkit  中有一个图片的扩展控件 - ImageEx,本篇我们结合代码详细讲解  ImageEx 的实现。 Image...

3217
来自专栏程序员的酒和故事

通过httprouter和redis框架搭建restful api服务

HttpRouter is a lightweight high performance HTTP request router (also called mu...

47710
来自专栏LIN_ZONE

markdown 基本语法(转载)

最近感觉一直使用富文本编辑器写东西,感觉有点烦,所以就试着学习了一下简单的markdown编辑器的使用

922
来自专栏游戏杂谈

EditPlus中有用的快捷键

点击到该标记(全选或光标落在里面即可)按下ctrl+[就可以找到匹配的标签了。权支持HTML标签的匹配。

1482
来自专栏mukekeheart的iOS之旅

Mac和Xcode常用的快捷键

Mac电脑一般都不怎么用鼠标,因此除了触摸屏的各种双指、三指甚至四指的操作之外,快捷键的使用可以带来非常大的便利,本文则主要收集整理了自己在Mac常规和Xcod...

47113
来自专栏landv

vb.net 结束进程

1733
来自专栏张高兴的博客

张高兴的 UWP 开发笔记:手机状态栏 StatusBar

3475
来自专栏跟着阿笨一起玩NET

关于DevExpress的XtraTreeList使用方法总结

1371

扫码关注云+社区

领取腾讯云代金券