ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现

IViewLocationExpander API

  • ExpandViewLocations Razor视图路径,视图引擎会搜索该路径.
  • PopulateValues 每次调用都会填充路由

项目目录如下所示

创建区域扩展器,其实我并不需要多区域,我目前只需要达到一个区域中有多个文件夹进行存放我的视图.

所以我通过实现IViewLocationExpander进行扩展添加我自定义视图路径规则即可正如下代码片段

 public class MyViewLocationExpander : IViewLocationExpander
  {
    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
      if (context.ControllerName != null && context.ControllerName.StartsWith("App"))
      {
        viewLocations = viewLocations.Concat(
          new[] { $"/Areas/sysManage/Views/App/{context.ControllerName}/{context.ViewName}{RazorViewEngine.ViewExtension}"
              });
        return viewLocations;
      }

      if (context.AreaName != "sysManage") return viewLocations;
      viewLocations = viewLocations.Concat(
        new[] { $"/Areas/sysManage/Views/System/{context.ControllerName}/{context.ViewName}{RazorViewEngine.ViewExtension}"
        });
      return viewLocations;
    }

    public void PopulateValues(ViewLocationExpanderContext context)
    {
    }
  }

在Startup.ConfigureServices 注册

 public void ConfigureServices(IServiceCollection services)
    {
      services.Configure<RazorViewEngineOptions>(o => {
        o.ViewLocationExpanders.Add(new MyViewLocationExpander());
      });
      services.AddMvc();
    } 
 app.UseEndpoints(endpoints =>
      {
        endpoints.MapRazorPages();
        endpoints.MapAreaControllerRoute(
          name: "sysManage", "sysManage",
          pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
      });

最终路由指向的还是

/SysManage/Controller/Action

到此这篇关于ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现的文章就介绍到这了,更多相关ASP.NET Core MVC 扩展视图搜索路径内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式判断权限,我们现在就来介绍下具体的操作方法. 如果在控制器方法里想要判断当前用户是否具有某个权限,可以直接使用HttpContext.User.HasClaim(string cliamtype,string cliamvalue)方法进行判断,该方法返回bool类型,返回true表示具有权限,否则

  • ASP.NET Core MVC基础学习之局部视图(Partial Views)

    1.什么是局部视图 局部视图是在其他视图中呈现的视图.通过执行局部视图生成的HTML输出呈现在调用视图中.与视图一样,局部视图使用 .cshtml 文件扩展名.当希望在不同视图之间共享网页的可重用部分时,就可以使用局部视图. 2.什么时候使用局部视图 局部视图是将大视图分成小组件的有效方法.通用的布局元素应在 _Layout.cshtml 中指定,非布局可重用内容可以封装成局部视图. 如果一个由几个逻辑部分组成的复杂页面,那么将每个逻辑部分作为局部视图是很有用.布局视图与普通视图之间没有语义差别

  • ASP.NET Core MVC学习之视图组件(View Component)

    1.视图组件介绍 视图组件是 ASP.NET Core MVC 的新特性,类似于局部视图,但它更强大.视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据. 视图组件特点: 呈块状,而不是整个响应 包括在控制器和视图之间发现的相同的关注点和可测试性优点 可以拥有参数和业务逻辑 通常从布局页面调用 视图组件可以用在任何需要重复逻辑且对局部视图来说过于复杂的情况,例如: 动态导航菜单 标签云(需要查询数据库) 登录面板 购物车 最近发表的文章 典型博客上的侧边栏内容 将在每个页面上呈现的登录面板

  • ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现

    IViewLocationExpander API ExpandViewLocations Razor视图路径,视图引擎会搜索该路径. PopulateValues 每次调用都会填充路由 项目目录如下所示 创建区域扩展器,其实我并不需要多区域,我目前只需要达到一个区域中有多个文件夹进行存放我的视图. 所以我通过实现IViewLocationExpander进行扩展添加我自定义视图路径规则即可正如下代码片段 public class MyViewLocationExpander : IViewLo

  • ASP.NET Core MVC如何实现运行时动态定义Controller类型

    昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案.我当时在外边,回复不太方便,所以只给他说了两个接口/类型:IActionDescriptorProvider和ApplicationPartManager.这是一个挺有意思的问题,所以回家后通过两种方案实现了这个需求.源代码从这里下载. 一.实现的效果 我们先来看看实现的效果.如下所

  • ASP.NET Core MVC 依赖注入View与Controller

    目录 一.ASP.NET Core MVC 之依赖注入 View 1.填充查找数据 2.重写服务 二. ASP.NET Core MVC 之依赖注入 Controller 1.构造函数注入 2.使用 FromServices 操作注入 3.在控制器中访问设置 一.ASP.NET Core MVC 之依赖注入 View ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分

  • ASP.NET Core MVC 中实现中英文切换的示例代码

    哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫做Localization,其官方的文档地址传送门. 在我的项目中,我是这样操作的,你想用别的方式,也可以看文档自己去搞.这个已经不是什么新鲜的东西了,只是网上的实现有些问题,不容易明白. 我们无需任何Nuget包,因为它是在Microsoft.AspNetCore.Mvc.Localization中,那么我们直接在.NET

  • 在ASP.NET Core Mvc集成MarkDown的方法

    这几天在做文章编辑,首先就想到了markdown,它比其它的都要新,而且很好用,相对于其它的html编辑器,好久不更新,要好得多,哦~对了我现在已经用上新版的Edge了,经过很多朋友测试,性能比谷歌浏览器都要好很多,并且资源消耗也相对来说小. 一.前提 好吧,言归正传,你首先需要下载MarkDown的相关样式脚本资源,下载完毕之后拖放你的ASP.NET Core Mvc 项目中的wwwroot中. 二.初始化 在页面中我们理所当然需要引用css 脚本资源,随后调用它的初始化方法. <script

  • ASP.NET Core MVC 修改视图的默认路径及其实现原理解析

    本章将和大家分享如何在ASP.NET Core MVC中修改视图的默认路径,以及它的实现原理. 导语:在日常工作过程中你可能会遇到这样的一种需求,就是在访问同一个页面时PC端和移动端显示的内容和风格是不一样(类似两个不一样的主题),但是它们的后端代码又是差不多的,此时我们就希望能够使用同一套后端代码,然后由系统自动去判断到底是PC端访问还是移动端访问,如果是移动端访问就优先匹配移动端的视图,在没有匹配到的情况下才去匹配PC端的视图. 下面我们就来看下这个功能要如何实现,Demo的目录结构如下所示

  • ASP.NET Core MVC中的视图(Views)

    目录 1.什么是视图 2.创建视图 3.控制器指定视图 4.给视图传递数据 1.弱类型数据 2.动态视图 5.更多视图特性 ASP.NET Core MVC 控制器可以使用视图返回格式化的结果. 1.什么是视图 在 MVC 中,视图封装了用户与应用交互呈现细节.视图是具有生成要发送到客户端内容的,包含嵌入代码的HTML模板.视图使用使用 Razor 语法,该语法允许以最少的代码或复杂度与 HTML 进行交互. ASP.NET Core MVC 视图默认以 .cshtml 文件保存在应用程序的 V

  • ASP.NET Core MVC在视图中使用依赖注入

    ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分数据应该从控制器传入. 使用 @inject 指令将服务注入到视图,语法 @inject <type> <name>,例如: @model MVCTest.Models.Operation @using MVCTest.Services @inject BaseInfoServices BaseInfoS

随机推荐