我有一个几乎每个页面都需要引用其组织记录的应用程序,因此在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?
似乎正在发生的事情是,当您直接通过URL进入“组织”页面时,就是这样>
当您在应用程序内手动完成操作时,我猜想await GetOrganization()在您没有时间单击链接之前就已完成。
如果第一次处理null时,您输入OnParameterSet,然后在第二遍传递时使用它,如果它不为null。
OR
它可能只是简单地调用CurrentOrganization = await GetOrganization(); base.OnInitializedAsync();
如“来自火星的阿瓜”的建议
我曾经在github中读过一个类似的问题,该问题以某种方式归因于路由器路由到页面组件的方式,但我对此一无所知...