代码之家  ›  专栏  ›  技术社区  ›  A.A

在Blazor视图中调用异步方法

  •  0
  • A.A  · 技术社区  · 5 年前

    我有一个服务器端的blazor客户端,我正试图通过登录检查来修改MainLayout razor页面。我目前正在使用Blazored进行本地存储保存,我目前正在使用查看是否保存了一个令牌以查看用户是否已登录,但是我不确定如何在razor页面的if语句中转换它,因为它需要异步方法。

    我的登录检查非常简单,如下所示。

    public async Task<bool> IsLoggedIn()
    {
        return await m_localStorage.ContainKeyAsync("token").ConfigureAwait(false);
    }
    

    在我的Razor页面中,我正在执行这个语句检查-很明显,它不起作用,因为没有异步修饰符

    @if (!await AppState.IsLoggedIn()) //Requires async modifier
    {
        <a href="Login" target="_blank">Login</a>
    }
    

    我也尝试过使用.Result属性执行此操作,但这会导致引发异常:(System.AggregateException:“信息:执行了隐式处理程序方法,返回结果Microsoft.AspNetC)”,内部异常->NullReferenceException:对象引用未设置为对象实例。

    但从我所看到的,AppState被正确地注入,本地存储似乎被正确地注入到AppState中。

    @if (!AppState.IsLoggedIn().Result)
    {
        <a href="Login" target="_blank">Login</a>
    }
    

    所以我的问题是,正确的方法是什么,有没有办法在razor页面中执行异步方法?

    0 回复  |  直到 5 年前
        1
  •  1
  •   user12207343user12207343    5 年前

    有没有办法在razor页面中执行异步方法?

    不,没有办法在剃须刀组件中使用await。这是因为不能将异步工作作为组件呈现的一部分。

    顺便说一下,Blazor团队提供的本地存储机制支持数据保护,建议Steve Sanderson使用。

    注意:组件的异步生命周期方法是完成异步工作的地方,因此您可以相应地设计代码,例如,从OnInitializedAsync调用AppState.IsLoggedIn(),并将返回值分配给可以从视图访问的本地变量。

    推荐文章