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

如何在Blazor中为不同卡片列表展示差异化模态框

Blazor列表卡片绑定差异化Bootstrap模态框实现方案

1. 定义数据模型

先创建封装卡片与对应模态框内容的模型类,把每个卡片的展示信息和模态框差异化数据整合在一起:

public class CardModalItem
{
    public int Id { get; set; }
    public string CardTitle { get; set; }
    public string CardContent { get; set; }
    public string ModalTitle { get; set; }
    public string ModalBody { get; set; }
}

2. 组件内实现逻辑与UI

在Blazor组件中,通过列表遍历生成卡片,绑定点击事件记录选中项,再基于选中项渲染对应模态框内容:

@inject IJSRuntime JSRuntime

<!-- 卡片列表 -->
<div class="row">
    @foreach (var item in CardModalList)
    {
        <div class="col-md-4 mb-3">
            <div class="card" style="cursor:pointer" @onclick="() => OpenModal(item)">
                <div class="card-body">
                    <h5 class="card-title">@item.CardTitle</h5>
                    <p class="card-text">@item.CardContent</p>
                </div>
            </div>
        </div>
    }
</div>

<!-- 通用模态框,根据选中项展示差异化内容 -->
<div class="modal fade" id="cardModal" tabindex="-1" aria-labelledby="cardModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="cardModalLabel">@SelectedItem?.ModalTitle</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                @SelectedItem?.ModalBody
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">关闭</button>
            </div>
        </div>
    </div>
</div>

@code {
    private List<CardModalItem> CardModalList { get; set; }
    private CardModalItem SelectedItem { get; set; }

    protected override void OnInitialized()
    {
        // 模拟5张卡片的数据源
        CardModalList = new List<CardModalItem>
        {
            new CardModalItem { Id = 1, CardTitle = "卡片1", CardContent = "点击查看卡片1的详情", ModalTitle = "模态框1", ModalBody = "这是卡片1对应的差异化内容" },
            new CardModalItem { Id = 2, CardTitle = "卡片2", CardContent = "点击查看卡片2的详情", ModalTitle = "模态框2", ModalBody = "这是卡片2对应的差异化内容" },
            new CardModalItem { Id = 3, CardTitle = "卡片3", CardContent = "点击查看卡片3的详情", ModalTitle = "模态框3", ModalBody = "这是卡片3对应的差异化内容" },
            new CardModalItem { Id = 4, CardTitle = "卡片4", CardContent = "点击查看卡片4的详情", ModalTitle = "模态框4", ModalBody = "这是卡片4对应的差异化内容" },
            new CardModalItem { Id = 5, CardTitle = "卡片5", CardContent = "点击查看卡片5的详情", ModalTitle = "模态框5", ModalBody = "这是卡片5对应的差异化内容" }
        };
    }

    private async Task OpenModal(CardModalItem item)
    {
        SelectedItem = item;
        // 调用JS打开Bootstrap模态框
        await JSRuntime.InvokeVoidAsync("bootstrap.Modal.getOrCreateInstance", "#cardModal").InvokeAsync("show");
    }
}

3. 进阶适配说明

如果需要更复杂的模态框内容(比如表单、自定义组件),可以在模态框的ModalBody部分根据选中项的标识做分支判断:

<div class="modal-body">
    @if (SelectedItem.Id == 1)
    {
        <p>卡片1的专属复杂内容</p>
        <CustomComponent1 />
    }
    else if (SelectedItem.Id == 2)
    {
        <p>卡片2的专属复杂内容</p>
        <CustomComponent2 />
    }
    <!-- 其他卡片的分支逻辑 -->
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:52:59