【发布时间】:2018-09-17 17:12:04
【问题描述】:
使用 Blazor 托管模板,在我的 MainLayout.cshtml 中,我有类似的内容:
@inject UserInfo userInfo
@if(userInfo.Name == "bob")
{
<div class="login-panel">
<p>Hi Bob!</p>
</div>
}
else
{
<LoginPanel />
}
然后在单独的Login.cshtml中:
@inject UserInfo userInfo
async void Login()
{
userInfo.Name = "bob";
}
但登录不会导致 MainLayout.cshtml 中的“登录面板”发生变化。如果所有内容都在一个文件中,并且我只检查特定变量是否为空(请参阅here),我就能够让它工作,所以我假设 Blazor 框架具有特定的标准,这些标准会非法页面重新评估这些块。这是准确的吗?如果是这样,强制重新评估的最佳方法是什么?
编辑:我又玩了一会儿,最终发现了 StateHasChanged 受保护的成员函数,我假设它在 Init 完成后被调用,因此前面的示例有效。我认为一个可行的解决方案是让我的UserInfo 对象实现INotifyPropertyChanged,然后在 MainLayout.cshtml 中注册一个更改处理程序以调用StateHasChanged() 以获取在登录状态更改时需要更新的视图。
【问题讨论】:
标签: c# asp.net-core blazor