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

Blazor页面如何渲染带数据库参数组件及动态新增空白组件

代码调整步骤

1. 修改集合定义

将存储RenderFragment的集合替换为存储业务数据的集合,同时增加数量上限常量:

// 最多同时存在10个组件
private const int MaxComponentCount = 10;
// 集合存储组件绑定的Tester数据,空实例对应空白组件
public List<Tester> sideItemDatas { get; set; }

2. 修改初始化逻辑

页面加载时将数据库查询到的数据填充到集合中:

protected override void OnInitialized()
{
    sideItemDatas = new List<Tester>();
    // 加载数据库数据
    var dbDatas = GetData();
    // 取数据库数据和上限的较小值,避免超过数量限制
    sideItemDatas.AddRange(dbDatas.Take(MaxComponentCount));
}

public List<Tester> GetData()
{
    List<Tester> data = new List<Tester>
    {
        new Tester{FirstName = "JJ", LastName = "PP"},
        new Tester{FirstName = "HH", LastName = "KK"},
        new Tester{FirstName = "KK", LastName = "LL"},
    };
    return data;
}

3. 修改组件渲染逻辑

直接循环数据集合渲染AddComponent,通过参数传递初始数据:
前提:你的AddComponent已经定义了接收Tester类型的参数,示例如下:

// AddComponent.razor 中添加参数定义
[Parameter]
public Tester InputModel { get; set; }

页面渲染部分代码调整为:

<button type="button" @onclick="GenerateComponents" id="btClickMe" disabled="@(sideItemDatas.Count >= MaxComponentCount)">
    Show Sign Up Window
</button>

<div id="groups-parent" style="display: block; min-height: 500px; position: relative; border: dashed 1px #888; ">
    @foreach (var itemData in sideItemDatas)
    {
        <div class="draggable obstacle">
            <AddComponent InputModel="@itemData" />
        </div>
    }
</div>

这里额外给按钮加了禁用逻辑,达到10个上限后就无法再新增。

4. 调整新增组件逻辑

点击按钮时新增空白Tester实例即可:

private async Task GenerateComponents()
{
    if (sideItemDatas.Count >= MaxComponentCount) return;
    // 新增空白Tester实例,对应无初始数据的组件
    sideItemDatas.Add(new Tester());
    StateHasChanged();
}

如果需要保留之前手动构造RenderFragment的实现方式,也可以在构造时通过builder.AddAttribute()方法传入参数,不过直接循环渲染组件的方式更简洁易维护。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:36:03