新建ThemeViewLocationExpander.cs 实现IViewLocationExpander接口
/// <summary> ???/// 自定视图主题 实现IViewLocationExpander接口 ???/// </summary> ???public class ThemeViewLocationExpander : IViewLocationExpander ???{ ???????public ThemeViewLocationExpander() ???????{ ???????} ???????/// <summary> ???????/// 主题名称 ???????/// /Views/+ViewLocationExpanders ???????/// </summary> ???????public string ThemeName { get; set; } = "Default"; ???????public void PopulateValues([FromServices]ViewLocationExpanderContext context) ???????{ ???????????HttpContext httpcontext = context.ActionContext.HttpContext; ???????????string theme = httpcontext.Request.GetTheme(); ???????????if (theme.IsNotNullOrEmpty()) ???????????{ ???????????????ThemeName = theme; ???????????} ???????????context.Values["theme"] = ThemeName; ???????} ???????/// <summary> ???????/// 主题切换 ???????/// </summary> ???????/// <param name="theme"></param> ???????/// <returns></returns> ???????public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, ??????????????????????????????????????????????????????????????IEnumerable<string> viewLocations) ???????{ ???????????string n = string.Empty; ???????????foreach (string item in viewLocations) ???????????{ ???????????????n = item.ToLower(); ???????????????if (!n.Contains("/shared")) ???????????????{ ???????????????????n = n.Replace("{1}", $"theme/{context.Values["theme"]}/{{1}}"); ???????????????} ???????????????yield return n; ???????????} ???????} ???}
添加新的ViewLocationExpanders
public class Startup{ ?public virtual void ConfigureServices(IServiceCollection services) ???????{services.AddMvc().AddRazorOptions(option => ???{ ???????option.ViewLocationExpanders.Clear(); ???????option.ViewLocationExpanders.Add(new ThemeViewLocationExpander()); ???}) ???}}
asp.net core ?自定视图主题 实现IViewLocationExpander接口
原文地址:https://www.cnblogs.com/SpeakHero/p/9634172.html