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

点击搜索填充Mud DataGrid:隐藏网格后_ref对象不可用求助

解决MudDataGrid搜索后显示并加载数据的问题

你遇到的核心问题是:用@if条件渲染网格时,初始未搜索状态下组件没被创建,导致_table引用为空,无法调用ReloadServerData。下面是两种可靠的解决方法:

方法一:用Visible属性控制显示(推荐)

让MudDataGrid始终在DOM中初始化,通过Visible属性控制是否显示,这样_table引用在组件加载时就能正常获取,不会出现空引用问题。

代码示例:

  1. 定义控制显示的变量:
private bool _showGrid = false;
private MudDataGrid<Item> _table;
  1. 网格组件代码:
<MudDataGrid T="Item" ServerData="@ServerReload" @ref="_table" Visible="@_showGrid">
    <!-- 你的列定义 -->
</MudDataGrid>
  1. 搜索按钮点击事件:
private async Task HandleSearch()
{
    // 先处理你的搜索条件逻辑,比如更新查询参数
    _showGrid = true; // 显示网格
    await _table.ReloadServerData(); // 触发服务器端数据加载
}

方法二:条件渲染+等待组件初始化(备选)

如果一定要用@if条件渲染,需要在设置显示标记后,等待组件完成渲染再调用重载方法:

代码示例:

  1. 定义变量:
private bool _hasSearched = false;
private MudDataGrid<Item> _table;
  1. 网格组件代码:
@if (_hasSearched)
{
    <MudDataGrid T="Item" ServerData="@ServerReload" @ref="_table">
        <!-- 你的列定义 -->
    </MudDataGrid>
}
  1. 搜索按钮点击事件:
private async Task HandleSearch()
{
    // 处理搜索条件
    _hasSearched = true;
    StateHasChanged(); // 强制触发组件渲染
    await Task.Delay(1); // 等待网格组件完成初始化
    await _table.ReloadServerData();
}

为什么方法一更优?

方法一中的Visible属性只是通过CSS隐藏组件,组件本身始终存在于DOM中,_table引用不会为空,逻辑更稳定,也不需要依赖延迟等待,避免了异步渲染的不确定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:27:08