Explanation

我是.NET Blazor的新手.

我想要做的是使用.NET Blazor中的默认切换按钮,并将其值存储在某个地方.

然后如果我 Select 这个菜单必须隐藏,在页面刷新时,它保持隐藏;否则它保持打开.

Question

如何才能正确地做到这一点呢?

这就是我到目前为止所做的:

MainLayout.Razor:

 <button onclick="Toggle();">
 Toggle
 </button>

代码:

@code {
    public static bool _menuOpen = true;

    void Toggle()
    {
        _menuOpen = !_menuOpen;
    }
}

推荐答案

正如你所指出的.你必须把信息存储在某个地方.

最好将其存储在本地存储中,您可以通过js函数访问:

<div>
    <button @onclick="ChangeMenuState">Menu open/close</button>
    Menu is: @_menuOpen
</div>

@code{
    bool _menuOpen;
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            try
            {
                _menuOpen = bool.Parse(await Js.InvokeAsync<string>("localStorage.getItem", nameof(_menuOpen)));
                StateHasChanged();
            }
            catch
            {
                Console.WriteLine($"local storage not set for {_menuOpen}");
            }
        }
    }

    async Task ChangeMenuState()
    {
        _menuOpen = !_menuOpen;
        await Js.InvokeVoidAsync("localStorage.setItem", nameof(_menuOpen), _menuOpen);
    }

}

Csharp相关问答推荐

如何打印已添加到List的Linq值,而不是C#中的:System.Collections.Generic.List ' 1[System.Int32]?

ASP.NET MVC购物车数量更新并从购物车中删除项目

将列表字符串映射为逗号分隔字符串<>

如何从HttpContext获取请求正文

ITypeLib2.GetLibStatistics()在C#中总是抛出AccessViolationException

try 在Blazor项目中生成html

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

C#.NET依赖项注入顺序澄清

使页面内容居中

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

Cosmos SDK和Newtonsoft对静态只读记录的可能Mutations

如何在ASP.NET Core8中启用REST应用程序的序列化?

同一组件的多个实例触发相同的事件处理程序

{ or ; expected error如何解决此问题

如何在一次数据库调用中为ASP.NET核心身份用户加载角色

Foreach非常慢的C#

正在try 将自定义字体添加到我的控制台应用程序

Linq SELECT的多条指令

RavenDb:为什么在字符串==空的情况下过滤会过滤得太多?

与Visual Studio 2022中的.NET框架相比,如何在.NET Core 6中获取错误输出的窗口句柄