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

Blazor模板中能否同时访问数据项与GridRow的Id属性?

解决方案

要实现在GridBody模板中同时访问自增Id和TItem属性,核心是调整泛型Grid组件的模板上下文类型,让模板接收包含Id与TItem的包装对象而非直接接收TItem。以下是具体实现步骤:

1. 定义GridRow包装类

先创建一个泛型类,用来封装自增Id和对应的TItem数据:

public class GridRow<TItem>
{
    public int Id { get; set; }
    public TItem Item { get; set; }
}

2. 修改泛型Grid组件

调整组件的模板参数类型,将原来接收RenderFragment<TItem>的GridBody改为接收RenderFragment<GridRow<TItem>>,同时在组件内部将传入的TItem列表转换为GridRow集合:

@typeparam TItem

[Parameter]
public IEnumerable<TItem> Items { get; set; } = Enumerable.Empty<TItem>();

// 修改模板参数类型为GridRow<TItem>
[Parameter]
public RenderFragment<GridRow<TItem>> GridBody { get; set; }

private List<GridRow<TItem>> _gridRows;

protected override void OnParametersSet()
{
    // 生成带自增Id的GridRow集合,Id从1开始计数
    _gridRows = Items.Select((item, index) => new GridRow<TItem>
    {
        Id = index + 1,
        Item = item
    }).ToList();
}

<!-- 组件渲染逻辑 -->
@foreach (var row in _gridRows)
{
    @GridBody(row)
}

3. 在Index.razor中使用

现在可以在GridBody模板中通过context.Id访问自增Id,通过context.Item.XXX访问TItem的属性:

@* 假设myItems是你的TItem类型列表 *@
<Grid Items="@myItems">
    <GridBody>
        <tr>
            <td>@context.Id</td>
            <td>@context.Item.ProductName</td>
            <td>@context.Item.Price</td>
        </tr>
    </GridBody>
</Grid>

这种方式完全不依赖TItem自身的Id属性,所有自增Id由Grid组件内部生成并通过GridRow传递给模板,同时保留了对TItem所有属性的访问能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:35:25