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

.NET 5中Handlebars.NET模板占位符无法填充数据的问题

解决Handlebars.NET模板占位符未被正确替换的问题

你的问题核心很明确:你传入模板的是JSON字符串,但Handlebars.NET无法直接从字符串中读取属性,它需要的是一个.NET对象(匿名类、强类型类或解析后的动态对象),所以才会出现占位符被替换为空的情况。

下面给你两种最常用的解决方案:

方案1:使用匿名类作为上下文(最简单直接)

直接创建一个匿名对象来存储你的上下文数据,不需要JSON字符串,Handlebars.NET可以直接识别对象的属性:

// 替换原来的JSON字符串定义
var context = new { customer = "mycustomer", tenant = "mytenant" };

// 原有的编译和渲染代码保持不变
var template = Handlebars.Compile(html);
string finalHtml = template(context);

方案2:解析JSON字符串为动态对象(适合JSON来自外部场景)

如果你的JSON数据是从文件、API接口等外部来源获取的,需要先把JSON字符串解析成.NET能识别的动态对象:

方式A:使用System.Text.Json(.NET 5内置,无需额外NuGet)

using System.Text.Json;

// 你的原始JSON字符串
var contextJson = "{ \"customer\" : \"mycustomer\", \"tenant\" : \"mytenant\" }";
// 解析为动态对象
var context = JsonSerializer.Deserialize<dynamic>(contextJson);

// 编译并渲染模板
var template = Handlebars.Compile(html);
string finalHtml = template(context);

方式B:使用Newtonsoft.Json(需要安装Newtonsoft.Json NuGet包)

如果你习惯用Newtonsoft.Json,也可以这样处理:

using Newtonsoft.Json;

var contextJson = "{ \"customer\" : \"mycustomer\", \"tenant\" : \"mytenant\" }";
var context = JsonConvert.DeserializeObject<dynamic>(contextJson);

var template = Handlebars.Compile(html);
string finalHtml = template(context);

验证效果

修改后重新运行代码,生成的finalHtml就会正确替换占位符,得到你预期的结果:

<script id="handlebars-demo" type="text/x-handlebars-template">
 <h1>Data Report for mycustomer</h1>
 <h2>Tenant: mytenant</h2>
 <p> This is for testing. </p>
</script>

内容的提问来源于stack exchange,提问作者Brad Y.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:47:32