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

如何将嵌套foreach获取的数据存储为层级结构并渲染嵌套HTML?

解决方案

1. 扩展模型类,添加层级关联属性

首先给现有模型添加嵌套属性,用来存储关联的子级数据:

修改TestSuiteModel中的Value类

namespace ABC.Models.TestSuiteModel
{
    public class Value
    {
        // 原有属性保持不变
        public int id { get; set; }
        public string name { get; set; }
        public string url { get; set; }
        // ...其他原有属性
        
        // 添加存储关联测试用例集合的属性
        public List<ABC.Models.TestCasesModel.Value> TestCases { get; set; } = new List<ABC.Models.TestCasesModel.Value>();
    }
}

修改TestCasesModel中的Value类

namespace ABC.Models.TestCasesModel
{
    public class Value
    {
        // 原有属性保持不变
        public TestCase testCase { get; set; }
        public List<PointAssignment> pointAssignments { get; set; }
        
        // 添加存储关联测试用例详情的属性
        public ABC.Models.TestCaseModel.TestCaseModel TestCaseDetail { get; set; }
    }
}

2. 修改数据获取逻辑,构建层级结构

更新GetTestSuites方法,把获取到的子级数据直接赋值到对应的父级属性中,替换原来的独立变量存储方式:

// 仅保留顶层测试套件变量即可
TestSuiteModel TestSuites;

public async Task GetTestSuites()
{
    string url = "https://dev.azure.com/****/****/_apis/test/Plans/12/suites?api-version=5.0";
    TestSuites = await TestSuiteService.GetTestSuites(url);

    if(TestSuites != null)
    {
        foreach (var ts in TestSuites.value)
        {
            var testCases = await TestCasesService.GetTestCases(ts.testCasesUrl);
            if (testCases?.value != null)
            {
                // 将测试用例集合绑定到当前测试套件
                ts.TestCases = testCases.value;
                
                foreach (var tcs in ts.TestCases)
                {
                    // 将测试用例详情绑定到当前测试用例
                    tcs.TestCaseDetail = await TestCaseService.GetTestCase(tcs.testCase.url);
                }
            }
        }
    }
}
 
protected override async Task OnInitializedAsync()
{
    await this.GetTestSuites();
    await base.OnInitializedAsync();
}

3. 嵌套渲染HTML

在Blazor组件的渲染部分,用嵌套foreach循环生成层级化列表:

@if (TestSuites?.value != null && TestSuites.value.Any())
{
    <ul class="test-suites-list">
        @foreach (var suite in TestSuites.value)
        {
            <li>
                <div>@suite.name (ID: @suite.id)</div>
                
                @if (suite.TestCases?.Any() == true)
                {
                    <ul class="test-cases-list">
                        @foreach (var testCase in suite.TestCases)
                        {
                            <li>
                                <div>测试用例ID: @testCase.testCase.id</div>
                                
                                @if (testCase.TestCaseDetail != null)
                                {
                                    <ul class="test-case-detail-list">
                                        <li>标题: @testCase.TestCaseDetail.fields.SystemTitle</li>
                                        <li>状态: @testCase.TestCaseDetail.fields.SystemState</li>
                                        <li>优先级: @testCase.TestCaseDetail.fields.MicrosoftVSTSCommonPriority</li>
                                        <li>指派给: @testCase.TestCaseDetail.fields.SystemAssignedTo?.displayName</li>
                                        <!-- 可按需添加更多展示字段 -->
                                    </ul>
                                }
                            </li>
                        }
                    </ul>
                }
            </li>
        }
    </ul>
}
else
{
    <p>暂无测试套件数据</p>
}

可根据需求添加CSS类调整层级缩进和样式,优化展示效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:48:20