Blazor 级联参数总是在后面 1
Blazor Cascading Parameter always 1 behind
我对我在这里做错了什么感到困惑。在我的布局文件中,我有一个 header 部分,该部分应根据我当前所在的页面进行更改。这是布局页面。
<CascadingValue Value="this">
<div class="min-h-full">
<NavMenu/>
<header class="bg-white shadow-sm">
<div class="max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8">
<h1 class="text-lg leading-6 font-semibold text-gray-900">@PageTitle</h1>
</div>
</header>
<main>
<div class="max-w-7xl mx-auto py-6 sm:px-6 lg:px-8">
<div class="px-4 py-4 sm:px-0">
@Body
</div>
</div>
</main>
</div>
</CascadingValue>
<Footer></Footer>
@PageTitle 是我用来控制 Header 文本的变量。
Code Behind 如此声明。
public string PageTitle { get; set; }
现在在我的视图页面上,我在后面的代码中执行此操作。
[CascadingParameter]
public MainLayout? Layout { get; set; }
protected override void OnInitialized()
{
Layout.PageTitle = "Current Page Header";
}
问题是它没有正确更新,我去的第一页会是空白,然后当我点击不同的页面时,它会在 header 部分落后一页。我的猜测是我现在对状态感到困惑,或者我做的完全错了。
非常感谢任何帮助。
您需要将字符串值传递给 MainLayout,然后调用 StateHasChanged 方法 re-render 它。
@code {
private string _pageTitle ;
public string PageTitle
{
get => _pageTitle;
set
{
if (_pageTitle != value)
{
_pageTitle = value;
}
InvokeAsync(() => StateHasChanged());
}
}
}
我对我在这里做错了什么感到困惑。在我的布局文件中,我有一个 header 部分,该部分应根据我当前所在的页面进行更改。这是布局页面。
<CascadingValue Value="this">
<div class="min-h-full">
<NavMenu/>
<header class="bg-white shadow-sm">
<div class="max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8">
<h1 class="text-lg leading-6 font-semibold text-gray-900">@PageTitle</h1>
</div>
</header>
<main>
<div class="max-w-7xl mx-auto py-6 sm:px-6 lg:px-8">
<div class="px-4 py-4 sm:px-0">
@Body
</div>
</div>
</main>
</div>
</CascadingValue>
<Footer></Footer>
@PageTitle 是我用来控制 Header 文本的变量。
Code Behind 如此声明。
public string PageTitle { get; set; }
现在在我的视图页面上,我在后面的代码中执行此操作。
[CascadingParameter]
public MainLayout? Layout { get; set; }
protected override void OnInitialized()
{
Layout.PageTitle = "Current Page Header";
}
问题是它没有正确更新,我去的第一页会是空白,然后当我点击不同的页面时,它会在 header 部分落后一页。我的猜测是我现在对状态感到困惑,或者我做的完全错了。
非常感谢任何帮助。
您需要将字符串值传递给 MainLayout,然后调用 StateHasChanged 方法 re-render 它。
@code {
private string _pageTitle ;
public string PageTitle
{
get => _pageTitle;
set
{
if (_pageTitle != value)
{
_pageTitle = value;
}
InvokeAsync(() => StateHasChanged());
}
}
}