在Scriban模板引擎中替换字典值遇Render错误求解答
解决Scriban模板引擎替换字典值时的渲染错误
我来帮你排查这个问题——你在Render行遇到的错误,核心是两个小细节问题,咱们一步步解决:
错误原因分析
你写的keyValuePairs[emailContent]里,emailContent没有加引号,编译器会把它当成一个未定义的变量,这肯定会触发编译错误。另外,其实还有更简洁的方式传递数据源给Scriban,不用手动从字典取值再构建匿名对象。
修正方案1:修复索引语法
如果想保留原有的匿名对象传递方式,只需要把索引改成字符串字面量即可:
string bodyText = "Hi, The following service(s) has reported issues. {{emailContent}} Thanks "; Dictionary<string, string> keyValuePairs = new Dictionary<string, string>() { {"emailContent", "UserManagement has following unhealthy subservice(s)"} }; var template1 = Template.Parse(bodyText); // 这里把emailContent改成字符串字面量"emailContent" var result1 = template1.Render(new { emailContent = keyValuePairs["emailContent"] }); Console.WriteLine(result1.ToString());
修正方案2:直接传入字典(更简洁)
Scriban支持直接把字典作为数据源传入,模板会自动匹配键名,省去构建匿名对象的步骤:
string bodyText = "Hi, The following service(s) has reported issues. {{emailContent}} Thanks "; Dictionary<string, string> keyValuePairs = new Dictionary<string, string>() { {"emailContent", "UserManagement has following unhealthy subservice(s)"} }; var template1 = Template.Parse(bodyText); // 直接传递字典,模板会自动解析键"emailContent"对应的值 var result1 = template1.Render(keyValuePairs); Console.WriteLine(result1.ToString());
这两种方式都能正常渲染出你想要的结果:Hi, The following service(s) has reported issues. UserManagement has following unhealthy subservice(s) Thanks
内容的提问来源于stack exchange,提问作者user2911592
相关产品推荐
相关产品推荐

