Fluid Parser迭代循环正常但无法显示属性值问题求助
问题原因与解决方案
核心问题
Fluid模板引擎默认的成员访问策略不会自动映射.NET的PascalCase(首字母大写)属性到模板中的同名引用,它默认遵循JavaScript风格的驼峰命名匹配规则,或者需要显式注册允许访问的成员。
解决方案1:修改模板属性名为驼峰
把模板中的item.Str改为item.str(小写开头),Fluid会自动将.NET的Str属性映射为驼峰式的str供模板访问:
{% for item in StrObjects %} String: {{ item.str }} {% endfor %}
解决方案2:显式注册成员访问规则
在创建TemplateContext后,注册StrObj的属性访问权限,让Fluid可以直接识别Str属性:
var ctx = new Fluid.TemplateContext(testObj); // 注册StrObj的Str属性 ctx.MemberAccessStrategy.Register<StrObj>(o => o.Str); // 如果要批量允许所有公共属性,可以用: // ctx.MemberAccessStrategy.Register<StrObj>(strategy => strategy.AllowAll());
验证说明
两种方案都能让代码输出预期结果:String: test1 String: test2 String: test3 String: test4。循环能执行说明StrObjects的集合访问正常,只是子对象的属性没有被正确识别,本质是Fluid的成员访问策略需要与.NET属性的命名匹配或显式授权。
内容的提问来源于stack exchange,提问作者Neanbey
相关产品推荐
相关产品推荐

