【发布时间】:2021-05-25 12:40:28
【问题描述】:
我有一个带有简单 index.razor 页面的服务器端 Blazor 应用程序。我的目标是阅读 sessionStorage 并使用它的内容。但现在我正在尝试逐步了解发生了什么。
这是html
@inject Blazored.SessionStorage.ISessionStorageService sessionStorage
<button @onclick="TestInc">TEST</button>
<h1>@tutu</h1>
我只有一个文本来显示数字和一个简单的按钮来增加我的价值 这是代码
@code {
private int tutu = 0;
public string sNom;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
bool isConnected = await sessionStorage.GetItemAsync<bool>("isConnected");
//if (!isConnected)
//{
// NavManager.NavigateTo("/Login", forceLoad: true);
//}
sNom = sessionStorage.GetItemAsync<string>("Nom").Result;
}
}
private void TestInc()
{
tutu += 1;
}
}
由于某种原因,如果我注释整个 OnAfterRenderAsync 函数,代码可以正常工作。当我单击按钮时,该页面将显示计数器并更新它。但是,如果我没有注释函数 OnAfterRenderAsync 并执行此操作,则计数器根本不会更新,并且如果我在 TestInc 中放置一个断点,它永远不会到达它。
我对 Blazor 比较陌生,所以我可能在这里遗漏了一些非常明显的东西。
我真正想要实现的是获取 sessionStorage 变量(例如用户名)并将其显示在我的 HTML 中,而无需单击按钮或重新加载页面
【问题讨论】:
-
记得拨打
base.OnAfterRenderAsync -
我应该在哪里称呼它?在文档中没有提到docs.microsoft.com/en-us/aspnet/core/blazor/components/…
-
无复制。重新开始并进行最小的更改,仅上面发布的代码,看看您是否可以证明您的问题。见minimal reproducible example。
-
调用基本方法是一种最佳实践,但我认为这不是问题所在。
-
de 代码中的布尔 IsConnected 是否发生变化?如果不是,问题可能出在应用程序的核心,例如缺少脚本。
标签: c# blazor blazor-server-side