如何将不同的 CSS 文件添加到 blazor 中的不同布局?

How to add different CSS files to different layouts in blazor?

嗨,各位 blazor 爱好者!

我有 2 个不同的布局,我想在每个布局上加载不同的 CSS 文件。

第一个是MainLayout.razor,另一个是AdminLayout.razor。

我想在 AdminLayout 中加载我的管理菜单 CSS 文件,而不使用“css 隔离”,因为此布局的 CSS 文件将来可能会有更多文件。

ASP.NET 核心 3.1 或 .NET 5.0

提前致谢。

您可以在 <head><body> 中的任何位置使用 HTML <link> 标记来包含 CSS,因此删除适当的 <link rel="stylesheet" href="..." /> 分别为 MainLayout.razor 和 AdminLayout.razor。

最终,可能会支持直接从 razor 组件向 <head> 添加内容,如 tracked here

.Net 3.1 或 .Net 5.0 的解决方案

使用此 java 脚本将 css 文件直接添加到页面或布局:

    function loadCss(cssPath) {
        var ss = document.styleSheets;
        for (var i = 0, max = ss.length; i < max; i++) {
            if (ss[i].href.includes(cssPath.substr(2)))
                return;
        }
        var link = document.createElement("link");
        link.rel = "stylesheet";
        link.href = cssPath;
    
        document.getElementsByTagName("head")[0].appendChild(link);
    }

我创建了一个 js 函数“loadCss”,你必须在 OnAfterRenderAsync 事件上调用这个函数:

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        await JsRuntime.InvokeVoidAsync("loadCss", "css/FILENAME.min.css");
    }