页面为什么不保留数据?

时间:2020-06-06 22:39:51

标签: c# asp.net .net blazor

因此,我当前正在查看Blazor示例项目。“计数器”更具体,当我增加页面上的值,然后单击Web应用程序上的其他选项卡时,假设“获取”数据”选项卡,它拉起了天气,然后我返回,增加的值又回到了0。为什么呢?为什么不保存?

这是导航菜单

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </li>
    </ul>
</div>

还有柜台

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

asp.net

3 个答案:

答案 0 :(得分:2)

这是设计使然。当“计数器页面组件”超出范围时,它将被销毁,而当您返回时,将重新创建它。但是您可以缓存其状态(计数值)并在返回页面时读取最后一个值。您可以将状态值保存在本地存储或会话存储(JavaScript Api)中,您可以直接使用Blazor的JSInterop功能使用状态值,或者更好的是,使用库设计与Blazor社区创建的Blazor一起使用,甚至通过开拓者队(推荐)

希望这对您有帮助...

答案 1 :(得分:1)

即使需要显示/隐藏组件,也可以根据需要创建/销毁它们。因此,它们所拥有的任何状态都会与消失的组件一起丢失。

组件设计用于呈现视觉效果和管理交互。他们可以保持某种状态,但是在自己的一生中不能保持状态。为此,您需要将状态存储在其他地方,例如在服务中。

我写了Fluxor来处理这种情况:https://github.com/mrpmorris/fluxor

有人在这里创建了一个视频:https://www.youtube.com/watch?v=k_c-ErPaYa8

答案 2 :(得分:0)

我认为您正在寻找的是国家管理。 当您为每个用户更改状态并想要保留状态时,则需要保存状态。

有几种方法(例如缓存)可以执行此操作, 看看here