如何从Blazor中的另一个组件重新渲染组件?

如何从Blazor中的另一个组件重新渲染组件?,blazor,blazor-server-side,asp.net-blazor,Blazor,Blazor Server Side,Asp.net Blazor,我有一个电子商务Blazor服务器项目,我想在从产品组件向购物车添加一个项目后重新呈现购物车组件。我尝试将购物车组件继承到产品组件,并运行购物车组件的公共方法来重新呈现其组件 产品组件中的“添加到购物车”方法 产品.剃须刀 public async Task AddToCart() { //The adding logic in this area StateHasChanged(); Reload(); // this method is inherited fro

我有一个电子商务Blazor服务器项目,我想在从产品组件向购物车添加一个项目后重新呈现购物车组件。我尝试将购物车组件继承到产品组件,并运行购物车组件的公共方法来重新呈现其组件

产品组件中的“添加到购物车”方法

产品.剃须刀

 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
}
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();
    }
手推车,剃刀

[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();

}
 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();

}
产品.剃须刀

 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
}
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();
    }

从购物车继承并不意味着您正在查看与项目中的“其他”购物车相同的实例。您继承的是购物车的类(定义),而不是正在运行的组件

有两种方法可以解决此问题:

使用公共父组件

  • 将Product.razor和Cart.razor作为公共父组件的子组件
  • 在Product.razor中,将项目添加到购物车后引发类似以下事件:
  • 在父组件中捕获此事件
  • 从正在运行的购物车组件的实例上的父组件调用Reload()。(请参见组件的@ref属性-)
  • 使用事件广播机构

  • 创建事件广播服务()
  • 在Product.razor中,将项目添加到购物车后,广播一条消息
  • 在Cart.razor中收听该消息
  • 收到该消息时更新Cart.razor中的视图

  • 您提供的代码没有为我提供足够的有关如何呈现这些组件的信息。他们在同一页上吗?您的购物车控制在主布局上吗?你把一个变成另一个的孩子了吗?