首页 > 解决方案 > ASP.NET Core 2.1 根据 DB 中的数据在布局中插入 CSS

问题描述

我有一个我正在努力解决的问题。一些背景:用户可以在我的应用程序中选择应用程序使用的配色方案,这个选择存储在数据库中。

我想要做的是基于这个选择,在页面加载时,为用户做出的选择提供 CSS 文件。

我一直在尝试做的是通过在 _Layout.cshtml 页面中执行 AJAX 请求来检查用户的选择,并将适当的 CSS 附加到标题中。这是可行的,但不是很好,因为有一些延迟,而且它不是一个好的解决方案,因为有时元素的某些样式在加载 CSS 后不正确。

我想做的是在服务器端做这个检查,就像控制器中的普通视图一样(布局页面缺少你知道的控制器,所以这就是我卡住的地方)。然后在 _Layout 视图中添加正确的 CSS。

所以亲爱的堆栈溢出者,你对我有什么建议可以实现吗?我的用户需要那种甜蜜甜蜜的黑暗主题。;)

提前致谢!

标签: cssasp.net-core

解决方案


创建服务

public class ThemeService
{
    private readonly MyDbContext  _dbContext;
    private readonly IMemoryCache _memoryCache;

    public ThemeService(MyDbContext dbContext, IMemoryCache memoryCache)
    {
        //Here you can also inject the UserManager<T> if needed
        _dbContext = dbContext;
        _memoryCache = memoryCache;
    }

    public string GetTheme()
    {
        throw new NotImplementedException();
    }
}

并将其注册到服务容器scoped(因为您需要DbContext):

services.AddScoped<ThemeService, ThemeService>();

在你看来,只需注入它

@inject ThemeService ThemeService;

后来在视图中:

<link type="text/css" href="@ThemeService.GetTheme()" />

推荐阅读