日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Razor Templating Engine

發布時間:2024/8/22 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。