You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 8 Blazor Web App的App.razor中获取LocalStorage值切换CSS

正确实现步骤

1. 修正LocalStorage值的解析问题

localStorage.getItem()返回的是字符串类型(即使存储的是布尔值,也会被转为"true"/"false"),直接用InvokeAsync<bool>会导致转换失败,需要先获取字符串再转为布尔值。

2. 处理异步加载后的组件刷新

Blazor组件初始渲染时,OnInitializedAsync可能还未执行完成,此时rtl还是默认值,需要在获取到值后调用StateHasChanged()触发重新渲染,确保CSS正确加载。

3. 完整实现代码

@inject IJSRuntime JSRuntime

@* 方式1:条件渲染link标签 *@
@if (rtl)
{
    <link rel="stylesheet" href="assets/vendor/css/rtl/core.css" class="template-customizer-core-css" />
}
else
{
    <link rel="stylesheet" href="assets/vendor/css/core.css" class="template-customizer-core-css" />
}

@* 方式2:动态绑定href(更简洁)*@
<link rel="stylesheet" href="@(rtl ? "assets/vendor/css/rtl/core.css" : "assets/vendor/css/core.css")" class="template-customizer-core-css" />

@code {
    private bool rtl;

    protected override async Task OnInitializedAsync()
    {
        // 从LocalStorage获取字符串值,处理键不存在的情况
        var rtlString = await JSRuntime.InvokeAsync<string>("localStorage.getItem", "rtl");
        
        // 转换为布尔值,默认设为false
        rtl = bool.TryParse(rtlString, out var result) ? result : false;
        
        // 触发组件重新渲染
        StateHasChanged();
    }
}

额外优化:封装LocalStorage操作

可以封装工具类简化布尔值的读写逻辑:

public static class LocalStorageExtensions
{
    public static async Task<bool> GetBooleanAsync(this IJSRuntime jsRuntime, string key, bool defaultValue = false)
    {
        var value = await jsRuntime.InvokeAsync<string>("localStorage.getItem", key);
        return bool.TryParse(value, out var result) ? result : defaultValue;
    }

    public static async Task SetBooleanAsync(this IJSRuntime jsRuntime, string key, bool value)
    {
        await jsRuntime.InvokeVoidAsync("localStorage.setItem", key, value.ToString());
    }
}

使用时直接调用:

rtl = await JSRuntime.GetBooleanAsync("rtl");

内容的提问来源于stack exchange,提问作者BePython Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:02:39