【问题标题】:NVelocity extension method ASP.NET webformNVelocity 扩展方法 ASP.NET webform
【发布时间】:2011-07-02 06:13:59
【问题描述】:

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

.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;
    }
}

或者是否有替代我正在尝试完成的任务?

【问题讨论】:

    标签: asp.net extension-methods nvelocity


    【解决方案1】:

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

    公共类 MyClass : NVelocity.IDuck { 公共对象 GetInvoke(字符串 propName) { …… } 公共对象调用(字符串方法,参数对象[] args) { …… } 公共无效SetInvoke(字符串propName,对象值) { …… } }

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

    【讨论】:

      【解决方案2】:

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

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

      然后在您的模板中:

      $helper.Evaluate($billableStatus)
      

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

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        相关资源
        最近更新 更多