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

已加载数据的MudTable为何Items属性仍为null?

MudTable的Items属性为null的原因及解决方法

原因

在ServerData模式下,MudBlazor的MudTable组件不会将服务端返回的TableData.Items赋值给组件自身的Items属性。这个Items属性是为客户端模式(直接绑定Items数据源)设计的,服务端分页场景下组件内部用私有状态管理当前页数据,不会对外暴露到Items属性中,所以你通过@_table.Items访问会得到null。

解决方法

方法1:维护本地当前页数据集合

在组件类中声明本地变量存储当前页数据:

private List<InvoiceVm> _currentPageItems = new();

在GetServerData方法中更新该变量:

private async Task<TableData<InvoiceVm>> GetServerData(TableState state)
{
    // 原有接口请求逻辑
    var response = await YourDataApiCall();
    // 更新本地集合
    _currentPageItems = response.Data.ToList();
    return new TableData<InvoiceVm>() { Items = response.Data, TotalItems = response.MetaData.TotalCount };
}

最后在Footer中使用本地集合计算当前页费用总和:

<FooterContent>
    <MudTd colspan="6"><strong>Total expenses :</strong> @_currentPageItems.Sum(e => e.InvoiceDetails.Sum(x => x.ProductPrice * x.Quantity))</MudTd>
</FooterContent>

方法2:获取全量总费用(推荐)

如果需要的是所有数据的总费用而非当前页,仅计算当前页数据无业务意义。此时应让后端接口在返回的元数据中包含总费用统计值(比如给MetaData增加TotalExpenses字段),再直接使用该值:

// 假设后端返回的MetaData已包含TotalExpenses属性
private decimal _totalExpenses;

private async Task<TableData<InvoiceVm>> GetServerData(TableState state)
{
    var response = await YourDataApiCall();
    _totalExpenses = response.MetaData.TotalExpenses;
    return new TableData<InvoiceVm>() { Items = response.Data, TotalItems = response.MetaData.TotalCount };
}

页面中直接展示全量总费用:

<FooterContent>
    <MudTd colspan="6"><strong>Total expenses :</strong> @_totalExpenses</MudTd>
</FooterContent>

内容的提问来源于stack exchange,提问作者hanushi-thana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:50:22