2011-02-22 47 views
0

我想知道是否有可能使用asp.net webforms和nvelocity的擴展方法。我想設置一些默認值,如果字符串值爲空或空。 .vm文件NVelocity擴展方法ASP.NET webform

例子:

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

或者是有什麼我tryting完成替代?

回答

2

我不認爲NVelocity可以用C#/ VB.NET語法糖來解析擴展方法。我要做的就是在速度方面註冊一個輔助的一個實例:

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

,然後在您的模板:

$helper.Evaluate($billableStatus) 

你必須讓你的幫手非靜態這個工作中,課程。

+0

太棒了!謝謝! – dm80 2011-02-22 20:18:01

0

我在過去遇到過類似的東西,而且我正在尋找更復雜和更具控制力的東西。我發現NVelocity確實提供了一種攔截方法和屬性調用的方法,但爲此您必須實現某些特定的功能。爲了使你的自定義攔截器,你將需要實現NVelocity.IDuck。例如

 

    public class MyClass : NVelocity.IDuck 
    { 
     public object GetInvoke(string propName) 
     { 
      .... 
     } 

     public object Invoke(string method, params object[] args) 
     { 
      .... 
     } 

     public void SetInvoke(string propName, object value) 
     { 
      .... 
     } 
    } 

現在的MyClass任何情況下將攔截和傳遞方法和屬性調用我們的這三個功能的實現,給我們一個機會來解決並返回輸出。您可能會從這三個函數簽名中注意到,爲了實現它們,我們可能需要一些反思,我們可以在可用的擴展類型中找到相應的方法並執行它們。如果需要,你可以閱讀以下博客文章,瞭解更多關於這種方式的細節。 NVelocity and extension methods