You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换页面时Navbar的List清空后无法添加多个项的技术问题

解决方案

问题根源

你当前的核心问题是页面切换时没有在正确时机清空列表,或是清空后新页面的多个name未被正常追加。之前调用Clear()后仅能添加单个项,大概率是因为清空操作的时机不对(比如每次接收name都清空),导致最终只保留了最后一个传入的值。

具体实现步骤

  1. 注入路由管理器监听页面切换
    在NavMenu.razor顶部注入NavigationManager,用来捕捉路由变化(即页面切换行为):
@inject NavigationManager NavManager
@implements IDisposable
  1. 订阅路由变化事件,切换时清空列表
    修改OnInitialized方法,新增路由变化的订阅逻辑:
protected override void OnInitialized()
{
    AddData.OnNameSent += HandleNameSent;
    // 监听路由变化,页面切换时自动清空列表
    NavManager.LocationChanged += OnLocationChanged;
}

// 路由变更触发的清空逻辑
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
{
    ListofItems.Clear();
    StateHasChanged();
}
  1. 完善资源清理,避免内存泄漏
    更新Dispose方法,取消路由事件的订阅:
public void Dispose()
{
    AddData.OnNameSent -= HandleNameSent;
    NavManager.LocationChanged -= OnLocationChanged;
}
  1. 保留原有添加逻辑
    HandleNameSent方法无需改动,新页面切换后触发的多次OnNameSent事件会自动将多个name追加到清空后的列表中:
private void HandleNameSent(string name)
{
    ListofItems.Add(name);
    StateHasChanged();
}

额外优化建议

如果新页面可以一次性返回多个name,建议修改AddData的事件定义,直接传递List<string>而非单个字符串,减少事件触发次数:

// 修改AddData中的事件
public event Action<List<string>> OnNamesSent;

// 触发事件时传入完整列表
OnNamesSent?.Invoke(new List<string> { "item1", "item2", "item3" });

// NavMenu中对应处理方法
private void HandleNamesSent(List<string> names)
{
    ListofItems.Clear();
    ListofItems.AddRange(names);
    StateHasChanged();
}

这样页面切换时只需触发一次事件,就能完成清空和批量添加,逻辑更简洁高效。

内容的提问来源于stack exchange,提问作者Sarahrb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:05:30