为什么直接访问页面时CascadingValue为null?
Why are CascadingValue's null when accessing the page directly?
我有一个应用程序,几乎每个页面都需要引用他们的组织记录,所以在 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 不为空,一切工作正常。
如果我在浏览器中直接转到组织页面 URL,MainLayout 中的 OnInitializedAsync 会触发一次,然后 OnParametersSetAsync 方法会触发,但 CurrentOrganization 现在为空。
直接通过 URL 访问页面与单击 link 访问页面有何不同?如果 MainLayout 在加载页面之前设置了 CascadingValue,为什么 CascadingParameter 为空?
当您通过 URL 直接进入组织页面时,似乎正在发生的事情是
- 您启动 await GetOrganization();
- 应用程序继续设置组织页面并触发 OnParametersSet
使用仍然为空的 CurrentOrganization
- 任务完成并设置 CurrentOrganization 参数
- 这次使用 CurrentOrganization 集再次引发 OnParametersSet
当您在应用程序中手动执行时,我猜 await GetOrganization() 在您有时间单击 link 之前完成。
如果您在第一次输入 OnParametersSet 时处理了空值,那么当它不为空时在第二次通过时使用它。
或它可能就像调用
一样简单
CurrentOrganization = await GetOrganization();
base.OnInitializedAsync();
'agua from mars' 建议
我有一个应用程序,几乎每个页面都需要引用他们的组织记录,所以在 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 不为空,一切工作正常。
如果我在浏览器中直接转到组织页面 URL,MainLayout 中的 OnInitializedAsync 会触发一次,然后 OnParametersSetAsync 方法会触发,但 CurrentOrganization 现在为空。
直接通过 URL 访问页面与单击 link 访问页面有何不同?如果 MainLayout 在加载页面之前设置了 CascadingValue,为什么 CascadingParameter 为空?
当您通过 URL 直接进入组织页面时,似乎正在发生的事情是
- 您启动 await GetOrganization();
- 应用程序继续设置组织页面并触发 OnParametersSet
使用仍然为空的 CurrentOrganization - 任务完成并设置 CurrentOrganization 参数
- 这次使用 CurrentOrganization 集再次引发 OnParametersSet
当您在应用程序中手动执行时,我猜 await GetOrganization() 在您有时间单击 link 之前完成。
如果您在第一次输入 OnParametersSet 时处理了空值,那么当它不为空时在第二次通过时使用它。
或它可能就像调用
一样简单 CurrentOrganization = await GetOrganization();
base.OnInitializedAsync();
'agua from mars' 建议