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

所属分类: 网络编程 / ASP.NET 阅读数: 1877
收藏 0 赞 0 分享

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中的mail的发送

Asp.net中的mail的发送
收藏 0 赞 0 分享

用ASP.Net实现文件的在线压缩和解压缩

用ASP.Net实现文件的在线压缩和解压缩
收藏 0 赞 0 分享

ASP.NET中文件上传下载方法集合

ASP.NET中文件上传下载方法集合
收藏 0 赞 0 分享

ASP.NET通过Remoting service上传文件

ASP.NET通过Remoting service上传文件
收藏 0 赞 0 分享

ASP.NET2.0服务器控件之Render方法

ASP.NET2.0服务器控件之Render方法
收藏 0 赞 0 分享

ASP.NET2.0 WebRource,开发微调按钮控件

ASP.NET2.0 WebRource,开发微调按钮控件
收藏 0 赞 0 分享

ASP.NET2.0新特性概述

ASP.NET2.0新特性概述
收藏 0 赞 0 分享

介绍几个ASP.NET中容易忽略但却很重要的方法函数

介绍几个ASP.NET中容易忽略但却很重要的方法函数
收藏 0 赞 0 分享

asp.net2.0如何加密数据库联接字符串

asp.net2.0如何加密数据库联接字符串
收藏 0 赞 0 分享

用.NET 2.0压缩/解压功能处理大型数据

用.NET 2.0压缩/解压功能处理大型数据
收藏 0 赞 0 分享
查看更多