ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
这篇文章主要介绍了ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
IViewLocationExpander API
ExpandViewLocations Razor视图路径,视图引擎会搜索该路径.
PopulateValues 每次调用都会填充路由
项目目录如下所示
创建区域扩展器,其实我并不需要多区域,我目前只需要达到一个区域中有多个文件夹进行存放我的视图.
所以我通过实现IViewLocationExpander进行扩展添加我自定义视图路径规则即可正如下代码片段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 注册
1 2 3 4 5 6 7 | public void ConfigureServices(IServiceCollection services) { services.Configure<RazorViewEngineOptions>(o => { o.ViewLocationExpanders.Add( new MyViewLocationExpander()); }); services.AddMvc(); } |
1 2 3 4 5 6 7 | app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapAreaControllerRoute( name: "sysManage" , "sysManage" , pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}" ); }); |
最终路由指向的还是
1 | /SysManage/Controller/Action |
到此这篇关于ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现的文章就介绍到这了