使用DotLiquid模板引擎处理枚举

本文关键字:处理 枚举 引擎 DotLiquid 使用 | 更新日期: 2023-09-27 18:25:02

我目前正在处理一个Web项目,需要能够发送电子邮件。我开始使用DotLiquid作为模板引擎,但我发现它存在某些问题,最大的问题是它似乎无法处理枚举。

我试着像Template.RegisterSafeType(typeof(Gender), new string[] { "Male", "Female" });那样将类型注册为"安全",但似乎不起作用。充其量,不再抛出任何异常,但预期结果为空。

<ul>
    {% for f in Model.Friends %}
        {% if f.Gender == Male %}
            <li>
                {{ f.FirstName }} {{ f.LastName }} {{ f.Gender }}
            </li>
        {% endif %}
    {% endfor %}
</ul>
<ul>
    {% for f in Model.Friends %}
        {% if f.Gender == Gender.Male %}
            <li>
                {{ f.FirstName }} {{ f.LastName }} {{ f.Gender }}
            </li>
        {% endif %}
    {% endfor %}
</ul>
<ul>
    {% for f in Model.Friends %}
        {% if f.Gender == 0 %}
            <li>
                {{ f.FirstName }} {{ f.LastName }} {{ f.Gender }}
            </li>
        {% endif %}
    {% endfor %}
</ul>

以上所有人都没能归还任何东西。我很乐意使用枚举的字符串或int表示,但目前还没有。有人找到解决这个问题的办法了吗?

我想避免自己在Drop对象中"转换"枚举,因为这可能会在以后引起混淆

谢谢。

使用DotLiquid模板引擎处理枚举

好的,所以如果有人感兴趣,我找到了答案。

当您注册类型时,您还可以根据所采用的重载将Func<object,object>指定为第二个或第三个参数。此函数允许您指定转换值。

所以,在我的例子中,你可以这样做:

Template.RegisterSafeType(typeof(Gender), o => o.ToString());

它开始发挥作用。