【发布时间】:2021-12-25 11:45:30
【问题描述】:
我想从 Pages 访问 MainLayout,以更新显示篮子中项目数量的值。
为此,我实现了 2 个不同的场景:
- 根据this线程为Event创建调用MainLayout方法的级联参数
- MainLayout的Cascase参数调用它们的公共方法(GetOrderCount)
两种情况都无法正常工作。查看示例代码:
protected override async Task OnAfterRenderAsync(bool firstRender)
{
System.Console.WriteLine($"OnAfterRender: {basketNo}");
}
protected override bool ShouldRender()
{
if (forceRerender)
{
forceRerender = false;
return true;
}
return base.ShouldRender();
}
public async Task GetOrderCount()
{
basketNo = await BasketService.GetCountOrdersAsync();
await Task.Delay(1);
forceRerender = true;
StateHasChanged();
}
<div class="basket">
<a class="btn btn-outline-light text-dark pos-relative" href="/Order">
<i class="bi-basket-fill"></i>
@if (basketNo > 0)
{
<span class="pos-absolute translate-middle badge rounded-pill @ccss">
@basketNo
</span>
}
</a>
</div>
在页面上,将商品添加到购物篮后,我从 MainLayout 调用 GetOrderCount 方法来更新购物篮编号。一切都会正常运行,没有任何问题。在 basketNo 更改后调用 OnAfterRender。但 UI 上的数据没有改变!
另一方面,如果我从 MainLayout 调用方法,例如按钮的 @onclick,它的工作和 basketNo 在 UI 上更新。 不知道Calling from Page 和Calling from on MainLayout 有什么区别!?
【问题讨论】: