天天看點

Razor Templating Engine

      下面講的都是一些其首頁上面的例子,是以請大家别拍磚。别後面想到有些實際意義的例子在寫個具體的運用例子吧。

Razor Templating Engine
Razor Templating Engine

代碼

public static class razor 

    public static string parse(string template, string name = null); 

    public static string parse<t>(string template, t model, string name = null); 

    public static void setlanguageprovider(ilanguageprovider provider); 

    public static void setmarkupparser(markupparser parser); 

    public static void settemplatebasetype(type type); 

}

Razor Templating Engine

在razor這個靜态類中最重要的方法當然是我們的parse方法了,其有兩個重載,在第二個重載在我們可以傳入template的model,了解asp.net mvc都會知道這個model。同時我們可以用setlanguageprovider方法傳入languageprovider(c#、vb)等,settemplatebasetype傳入模闆basetype(可能是我們的自定義類型)。

1:先來個簡單的template:

Razor Templating Engine
Razor Templating Engine

static void main(string[] args) 

       { 

           string template = "hello @model.name! welcome to razor!"; 

           string result = razor.parse(template, new { name = "world" });         

           console.writeline(result); 

           console.read(); 

       } 

Razor Templating Engine

輸出結果:

hello world! welcome to razor!

在這裡我們傳入的是new { name = "world" }的匿名對象的model。

2:内部嵌套方法:

Razor Templating Engine

string template = @"@helper mymethod(string name) {

hello @name

@mymethod(model.name)! welcome to razor!"; 

string result = razor.parse(template, new { name = "world" }); 

Razor Templating Engine

輸出同樣是上邊的結果,但是注意這裡的與上面不同的是在{}中間的空格等是不會忽略的。我的了解是同樣是一個模闆的形式吧。

3:傳遞模闆參數:

在傳遞參數的情況下我們可以采用自定義類,繼承至templatebase 或者templatebase<t>,後者是帶model的情形。

還是官方的例子來看看,

Razor Templating Engine
Razor Templating Engine

    { 

        razor.settemplatebasetype(typeof(mycustomtemplatebase<>));

        string template = "my name in upper case is: @touppercase(model.name)"; 

        string result = razor.parse(template, new { name = "matt" });

        console.writeline(result); 

        console.read(); 

    } 

public abstract class mycustomtemplatebase<t> : templatebase<t> 

    public string touppercase(string name) 

        return name.toupper(); 

Razor Templating Engine

輸出結果為:my name in upper case is: matt。

在我們的mycustomtemplatebase<t>抽象類中我們可以像mvc一樣定義一些輔助屬性和方法,像html、request、response等輔助類等

有事我們需要自定義一些非modle的非static property給template,我的考慮是在templateservice 中的重寫parse方法中初始化action:

public string parse<t>(string template, t model, string name = null,action<itemplate<dynamic>> initaction);

繼續閱讀