Razor Templating Engine
?????? 最近遇到html模板解析,我完全可以用MS的T4模板或者是StringTemplate等其他的模板來做,但是出于嘗試和對Razor語發的感興趣,便翻了翻Razor模板的資料,其CodePlex主頁http://razorengine.codeplex.com/。
????? 下面講的都是一些其主頁上面的例子,所以請大家別拍磚。別后面想到有些實際意義的例子在寫個具體的運用例子吧。
代碼 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這個靜態類中最重要的方法當然是我們的Parse方法了,其有兩個重載,在第二個重載在我們可以傳入Template的Model,了解asp.net mvc都會知道這個Model。同時我們可以用SetLanguageProvider方法傳入LanguageProvider(C#、VB)等,SetTemplateBaseType傳入模板BaseType(可能是我們的自定義類型)。
1:先來個簡單的Template:
代碼 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();?
???????}?
?
?
輸出結果:
Hello World! Welcome to Razor!
在這里我們傳入的是new { Name = "World" }的匿名對象的Model。
2:內部嵌套方法:
?
string?template?=?@"@helper?MyMethod(string?name)?{Hello?@name
}
@MyMethod(Model.Name)!?Welcome?to?Razor!";?
string?result?=?Razor.Parse(template,?new?{?Name?=?"World"?});?
?
輸出同樣是上邊的結果,但是注意這里的與上面不同的是在{}中間的空格等是不會忽略的。我的理解是同樣是一個模板的形式吧。
3:傳遞模板參數:
在傳遞參數的情況下我們可以采用自定義類,繼承至TemplateBase 或者TemplateBase<T>,后者是帶Model的情形。
還是官方的例子來看看,
代碼 static?void?Main(string[]?args)?????{?
????????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();?
????}?
}?
?
輸出結果為: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);轉載于:https://www.cnblogs.com/whitewolf/archive/2010/12/22/1913718.html
總結
以上是生活随笔為你收集整理的Razor Templating Engine的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery插件 autoComboBo
- 下一篇: 屏幕录像 Camstudio