我有一个应用程序,几乎每个页面都需要引用其组织记录,因此在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),并且如果单击“组织”页面,则将触发OnParametersSetAsync方法,并且CurrentOrganization不为null,并且一切正常
但是,如果我直接在浏览器中转到“组织”页面URL,则MainLayout中的OnInitializedAsync将触发一次,然后OnParametersSetAsync方法将触发,但CurrentOrganization现在为空。
直接通过URL访问页面而不是单击链接来访问页面有什么不同?如果MainLayout在加载页面之前设置了CascadingValue,为什么CascadingParameter为null?
答案 0 :(得分:0)
似乎正在发生的事情是,当您直接通过URL转到“组织”页面时
当您在应用程序内手动进行操作时,我猜await GetOrganization()在您没有时间单击链接之前就已完成。
如果您是第一次处理null,则在您输入OnParameterSet时会在第二遍使用它,如果它不为null。
OR ,它可能和调用一样简单
CurrentOrganization = await GetOrganization();
base.OnInitializedAsync();
建议使用“来自火星的阿瓜”