为什么直接访问该页面时CascadingValue为null?

问题描述 投票:0回答:2

我有一个几乎每个页面都需要引用其组织记录的应用程序,因此在MainLayout.razor中我有此代码

@code {

  Organization CurrentOrganization { get; set; }

  protected override async Task OnInitializedAsync()
  {
    await base.OnInitializedAsync();
    CurrentOrganization = await GetOrganization();
  }

}

<CascadingValue Name="CurrentOrganization" Value="@CurrentOrganization">
  // This wraps the entire page body
</CascadingValue>

然后在我的页面中,我像这样引用CascadingValue

@page "/organization"
@code {

  [CascadingParameter(Name = "CurrentOrganization")]
  Organization CurrentOrganization { get; set; }

  protected override async Task OnParametersSetAsync()
  {
      await base.OnParametersSetAsync();
      // Use CurrentOrganization
  }

}

如果启动网站,则会调用MainLayout中的OnInitializedAsync方法(两次,并且两次同时正确设置CurrentOrganization),如果我单击Organization页面,则将触发OnParametersSetAsync方法,并且CurrentOrganization不为null,并且一切正常。

但是,如果我直接在浏览器中转到“组织”页面URL,则MainLayout中的OnInitializedAsync会触发一次,然后OnParametersSetAsync方法会触发,但CurrentOrganization现在为null。

直接通过URL访问页面而不是单击链接来访问页面有什么不同?如果MainLayout在加载页面之前设置了CascadingValue,为什么CascadingParameter为null?

c# blazor asp.net-core-3.0
2个回答
0
投票

似乎正在发生的事情是,当您直接通过URL进入“组织”页面时,就是这样>

  1. 您启动await GetOrganization();
  2. 该应用将继续设置组织页面并触发OnParameterSet仍然为null的CurrentOrganization
  3. 任务完成并设置CurrentOrganization参数
  4. 这次使用CurrentOrganization设置再次引发OnParameterSet
  5. 当您在应用程序内手动完成操作时,我猜想await GetOrganization()在您没有时间单击链接之前就已完成。

如果第一次处理null时,您输入OnParameterSet,然后在第二遍传递时使用它,如果它不为null。

OR

它可能只是简单地调用
 CurrentOrganization = await GetOrganization(); 
 base.OnInitializedAsync();  

如“来自火星的阿瓜”的建议


0
投票

我曾经在github中读过一个类似的问题,该问题以某种方式归因于路由器路由到页面组件的方式,但我对此一无所知...

© www.soinside.com 2019 - 2024. All rights reserved.