【问题标题】:How to after refresh page resetting value in blazor?如何在 blazor 中刷新页面重置值?
【发布时间】:2020-06-23 19:09:03
【问题描述】:

我想在用户进入 Dashboard 页面后,ISessionStorageService 正常工作时获取当前使用登录信息,Dashboard 有一个 layout布局页面获取SessionStorage当前用户登录的值,

布局页面

h1>@UserInfo.FullName</h1>

@Body

@code {

    private LoginUser UserInfo = new LoginUser();

    async Task UpdateUserInfo() => UserInfo = await SessionStorage.GetItemAsync<LoginUser>("LoginUser");

    protected override async Task OnInitializedAsync()
    {
        await UpdateUserInfo();
    }
}

登录页面设置值

await SessionStorage.SetItemAsync("LoginUser", loginUser);

注意:用户登录和页面之间的切换可以工作,但是当我想刷新页面时会报错

InvalidOperationException: JavaScript interop calls cannot be issued at this time. This is because the component is being statically rendererd. When prerendering is enabled, JavaScript interop calls can only be performed during the OnAfterRenderAsync lifecycle method.

【问题讨论】:

  • 你不能在那个事件上做 js 互操作,试试OnAfterRenderAsync 就像错误提到的那样。
  • 你的意思是调用'OnAfterRenderAsync'?当我打电话给OnAfterRenderAsync userInfo 是空的

标签: c# .net-core blazor blazor-server-side session-storage


【解决方案1】:

当您使用预渲染时,您无法在此过程进行时调用 JavaScript 方法。而是将调用设置为 UpdateUserInfo 方法 在 OnAfterRender(Async) 对中,如下所示:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
       if( firstRender )
       {
           await UpdateUserInfo();
           InvokeAsync( () => StateHasChanged());

        }
}

希望这会有所帮助...

【讨论】:

  • 使用OnAfterRenderAsyncUserInfo 字段未更新
  • 这是另一个问题,与第一个无关。
  • 我认为您需要重新呈现您的页面。使用:InvokeAsync(() => StateHasChanged());
猜你喜欢
  • 1970-01-01
  • 2012-08-20
  • 2021-04-05
  • 2013-07-12
  • 2020-07-21
  • 2023-02-01
  • 1970-01-01
  • 2013-02-11
  • 2011-10-22
相关资源
最近更新 更多