【发布时间】:2021-08-17 05:04:38
【问题描述】:
我有一个电子商务 Blazor 服务器 项目,我想在从 产品组件 将商品添加到购物车后重新呈现 购物车组件强>。我尝试将 Cart 组件继承到 Product 组件并运行 Cart 组件的公共方法来重新渲染其组件。
产品组件中的添加到购物车方法。
产品.Razor
public async Task AddToCart()
{
//The adding logic in this area
StateHasChanged();
Reload(); // this method is inherited from the Cart Component trying to re-render the Cart Component
//Does not work
}
购物车.剃刀
[Parameter]
public List<Models.Cart> CartItem { get; set; }
protected override void OnInitialized()
{
CartItem = _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(_httpContextAccessor.HttpContext.User) && !i.IsSold).ToList();
}
public void Reload()
{
OnInitialized();
StateHasChanged();
}
方法成功运行,但 UI 没有按照我想要的方式重新渲染。
虽然当我运行OnInitialized() 方法和StateHasChanged() 时UI 会重新渲染?
谢谢。
编辑:我更新了我的Reload() 方法并在AddToCart() 方法的末尾调用它,但它不起作用:(
购物车.剃刀
protected override void OnParametersSet()
{
CartItem = _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(_httpContextAccessor.HttpContext.User) && !i.IsSold).ToList();
}
public void Reload()
{
OnParametersSet(); //updated but still not working
StateHasChanged();
}
产品.Razor
public async Task AddToCart()
{
//The adding logic in this area
Reload(); // this method is inherited from the Cart Component trying to re-render the Cart Component
//Does not work
StateHasChanged();
}
【问题讨论】:
-
您提供的代码没有为我提供有关您如何呈现这些组件的足够信息。他们在同一页上吗?您的购物车控件在主布局上吗?你让一个人成为另一个人的孩子吗?
标签: blazor blazor-server-side asp.net-blazor