理解模板引擎Razor 的原理

2021-06-18 03:47:15 字數 2382 閱讀 9532

razor是asp.net mvc 3中新加入的技術,以作為aspx引擎的乙個新的替代項。簡潔的語法與.net framework 結合,廣泛應用於asp.net mvc 專案。razor pad是乙個編輯razor指令碼的工具,脫離於asp.net 和visual studio。

微軟已經有一套模板引擎t4,在設計asp.net mvc 3時又設計一套模板引擎razor,對開發者而言是多一種選擇,但同時也增加學習成本,至今我都沒有時間和精力將code smith的模板轉化為t4的模板。

razor  從模板到.net **

以cshtml為字尾名的為razor模板,可以混合指令碼語言和html**,以呈現為asp.net page頁面。

@foreach(var post in posts) 

razor引擎分析上面的指令碼,產生如下所示的xml文字片段

\r\n\t

@foreach(var post in posts)

\r\n

以空格或是@作為區域(block)的分割符,將razor解析成乙個表示式樹。@在razor模板中的用法相當靈活,可以用於表示式的求值,或是定義**塊。

然後產生.net**,上面的指令碼,會產生如下的.net**型別

namespace razor 

public override void execute()

writeliteral("\r\n

"); }

}}

最後,應用codedom api編譯上面的**,呼叫execute方法輸出結果。

razor api

一開始接觸這項技術時,以為是asp.net mvc的乙個開源專案,接觸之後才知道它是.net framework api中的型別,幾年沒有做web開發,asp.net技術發展的確實很快。

system.web.razor.parser.razorparser

razorparser用於解析指令碼,但是它對html,cs,vb指令碼一無所知。markupparser用於解析html標記,csharpcodeparser用於解析包含c#**的標記,相應的vbcodeparser則用於解析包含vb指令碼的標記,

system.web.razor.generator.razorcodegenerator

根據傳入的markup parser,產生**。與parser相似,它也有二個與標記語言相關的型別,csharprazorcodegenerator 和vbrazorcodegenerator,用於處理標記包含的指令碼。

system.web.razor.razorenginehost

system.web.razor.razortemplateengine

引擎宿主,用於接受標記指令碼,產生.net 型別的**。

把上面的內容綜合起來,寫乙個例子程式,來看這些api的用法。

建立指令碼宿主

var language = new csharprazorcodelanguage();

var host = new razorenginehost(language) ;

新增razor指令碼引擎,讀取標記(markup)檔案

razortemplateengine engine = new razortemplateengine(host);

generatorresults razorresult = engine.generatecode("c:\\script.txt");

編譯標記檔案生成的型別,生成code dom 指令碼

compilerresults compilerresults =

new csharpcodeprovider()

.compileassemblyfromdom(

new compilerparameters(/*...*/),

razorresult.generatedcode

);

執行生成的程式集型別,獲取結果

var template = (customtemplatebase)activator.createinstance(「programmingrazor.demotemplate」);

template.execute();

razor pad程式的功能,也是用的這個基本思路來展來的。

razor pad是乙個開放原始碼的程式,你可以從**中獲取它的源**。

Razor模板引擎

注 visual studio2010及以下是不支援razor的 如果在使用vs2015等更高版本的時候出現 file not found exception cannot load system.web.razor.dll version 2.0.0 這樣的錯誤,請換用下面附件中的程式集把舊的ra...

Razor 模板引擎的使用

安裝razor的模板引擎,通過vs的 擴充套件管理器 查詢 razorengine 並安裝。安裝的dll包括 razorengine.dll 和 system.web.razor.dll 主要使用razorengine.razor 類下的靜態方法parse string razortemplate,...

Razor模板引擎(C 版)語法

1 簡介 razor 是一種標記語法,可以讓您將基於伺服器的 visual basic 和 c 嵌入到網頁中。基於伺服器的 可以在網頁傳送給瀏覽器時,建立動態 web 內容。當乙個網頁被請求時,伺服器在返回頁面給瀏覽器之前先執行頁面中的基於伺服器的 通過伺服器的執行,能執行複雜的任務,比如進入資料庫...