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

Handlebars为何认为我的列表为空?C# .NET技术问题咨询

问题分析与解决

你的代码存在两个核心问题,导致仅显示表头而无数据行:

1. 模板遍历的上下文不匹配

模板中使用{{#each entry}}来遍历名为entry的列表,但你传入的是直接反序列化得到的List<TemplateParams>集合——这个集合本身并没有entry属性,Handlebars找不到可遍历的数据,因此不会渲染表格行。

2. 字段名拼写错误

模板里的{{data}}对应JSON中的date字段,拼写不一致,即便数据正常渲染,这一列也会显示空值。


解决方法一:修改模板,直接遍历根集合

把模板中的{{#each entry}}改为{{#each .}}(.代表当前上下文,即传入的整个列表),同时修正字段名:

string mySource =
@"<table>
    <tr>
        <th>File Name</th>
        <th>Error</th>
        <th>Size</th>
        <th>Date</th>
        <th>Testing</th>
    </tr>
    {{#each .}}
        <tr>
            <td>{{fname}}</td>
            <td>{{error}}</td>
            <td>{{size}}</td>
            <td>{{date}}</td>
            <td>test data</td>
        </tr>
    {{/each}}
</table>";

// 其余代码保持不变
var plz = JsonConvert.DeserializeObject<List<TemplateParams>>(json);
var template = Handlebars.Compile(mySource);
var result = template(plz);

解决方法二:包装列表,匹配模板结构

保持原模板不变,将反序列化后的列表包装到一个包含entry属性的对象中传入模板:

// 模板保持原{{#each entry}}结构不变
var plz = JsonConvert.DeserializeObject<List<TemplateParams>>(json);
var template = Handlebars.Compile(mySource);
// 包装成带entry属性的对象
var result = template(new { entry = plz });

注意:无论哪种方法,都需要将模板里的{{data}}改为{{date}},否则Date列会显示空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:30:23