0

我想知道是否可以使用带有 asp.net webforms 和 nvelocity 的扩展方法。如果字符串值为空或空,我想设置一些默认值。

.vm 文件示例:

    Example of my email body...

    Billable Status: $billableStatus.Evaluate()

    rest of my email body...

尝试的扩展方法:

public static class Helper
{
    public static string Evaluate(this string value)
    {
        if (String.IsNullOrEmpty(value))
            return "Not Provided";
        else
            return value;
    }
}

或者有什么替代我想要完成的事情吗?

4

2 回答 2

2

我不认为 N​​Velocity 可以使用 C#/VB.NET 语法糖解析扩展方法。我所做的是在速度上下文中注册一个助手的实例:

var context = VelocityContext();
context.Put("helper", new Helper());
context.Put("billableStatus", "something");
...

然后在您的模板中:

$helper.Evaluate($billableStatus)

当然,你必须让你的助手非静态才能工作。

于 2011-02-22T19:46:51.490 回答
0

我在过去遇到过类似的事情,我一直在寻找更复杂、更有控制力的东西。我发现 NVelocity 确实提供了一种拦截方法和属性调用的方法,但为此你必须实现某些东西。为了制作您的自定义拦截器,您需要实现 NVelocity.IDuck。例如

    公共类 MyClass : NVelocity.IDuck
    {
        公共对象 GetInvoke(字符串 propName)
        {
            ……
        }

        公共对象调用(字符串方法,参数对象[] args)
        {
            ……
        }

        公共无效SetInvoke(字符串propName,对象值)
        {
            ……
        }
    }

现在 MyClass 的任何实例都会拦截并将方法和属性调用传递给我们这三个函数实现,让我们有机会解析并返回输出。您可能会从这三个函数签名中注意到,为了实现它们,我们可能需要一些反射,我们可以在可用扩展类型上找到相应的方法并执行它们。如果需要,您可以阅读以下博客文章以获取有关此方式的更多详细信息。NVelocity 和扩展方法

于 2013-01-07T09:48:58.900 回答