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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理解模板引擎Razor 的原理

發布時間:2025/6/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解模板引擎Razor 的原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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頁面。

來看下面的Razor腳本片段,它以div的格式輸出Posts對象的標題:

<div> @foreach(var post in Posts) { <div>@post.Title</div> } </div>

Razor引擎分析上面的腳本,產生如下所示的Xml文本片段

<Document> <Markup><div>\r\n\t</Markup> <Statement> <Transition>@</Transition> <Code>foreach(var post in posts) { </Code> <Markup> <Markup><div></Markup> <Expression> <Transition>@</Transition> <ImplicitExpression>post.Title</ImplicitExpression> </Expression> <Markup></div></Markup> </Markup> <Code> } </Code> <Markup></div></Markup> </Statement> <Markup>\r\n</div></Markup> </Document>

以空格或是@作為區域(block)的分割符,將Razor解析成一個表達式樹。@在Razor模板中的用法相當靈活,可以用于表達式的求值,或是定義代碼塊。

然后產生.NET代碼,上面的腳本,會產生如下的.NET代碼類型

namespace Razor { public class __CompiledTemplate { public __CompiledTemplate() { } public override void Execute() {WriteLiteral("<div>\r\n\t");@foreach(var post in posts) {WriteLiteral("<div>");Write(post.Title);WriteLiteral("</div>");}WriteLiteral("\r\n</div>");} } } ?

最后,應用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) {DefaultBaseClass = "CustomTemplateBase", DefaultClassName = "DemoTemplate",DefaultNamespace = "ProgrammingRazor", }; ?

添加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是一個開放源碼的程序,你可以從網址http://razorpad.codeplex.com中獲取它的源代碼。

?

?

轉載于:https://www.cnblogs.com/JamesLi2015/p/3213642.html

總結

以上是生活随笔為你收集整理的理解模板引擎Razor 的原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人欧美一区二区三区在线观看 | 日本精品入口免费视频 | 69久人妻无码精品一区 | 色多多网站 | 亚洲女人被黑人巨大进入 | 欧美激情视频在线观看 | 蜜桃无码一区二区三区 | 国产成人午夜精品无码区久久 | 日本福利片在线观看 | 亚洲麻豆一区二区三区 | 天天干夜夜 | 韩日欧美| 91尤物视频在线观看 | 欧美国产一级片 | 欧美一区二区成人 | 高h乱l高辣h文短篇h | 亚洲网站视频 | 青青操青青 | 日本三级视频在线观看 | 岛国大片在线 | 欧美综合图区 | 夜夜夜夜骑 | 四虎永久地址 | 怡春院视频 | 国产精品v日韩精品v在线观看 | 成人不卡av | 国产熟妇一区二区三区四区 | 欧美日韩亚洲一区二区三区 | 色婷婷激情网 | 免费av手机在线观看 | 日日夜夜狠 | 成人黄色一级视频 | 日韩a级在线观看 | 操操影视| 日韩欧美国产一区二区三区在线观看 | 亚洲美女影院 | 奇米影视777第四色 2019中文字幕在线免费观看 | 国产又粗又长又黄 | a级片久久 | 寡妇高潮一级视频免费看 | 国产a国产 | 色噜噜色狠狠 | 一级淫片免费看 | 国产毛片儿 | 精品无码久久久久国产 | 日韩av免费在线看 | 青娱乐欧美 | 欧美日韩一区精品 | 精品欧美一区二区久久久久 | 日韩av手机在线免费观看 | 日韩 欧美 亚洲 国产 | 国语对白永久免费 | 特黄三级又爽又粗又大 | 欧美在线观看视频一区二区 | 亚洲综合精品 | 欧美v日本 | 五月综合视频 | cao在线 | 九九热最新视频 | 加勒比av在线播放 | 亚洲aaa级| 欧美黑人一区 | 成年人视频在线看 | 亚洲成人自拍偷拍 | 巨乳美女被爆操 | 久久久不卡国产精品一区二区 | 日本中文字幕高清 | 国产乱欲视频 | 人妻精品一区二区三区 | 免费在线观看黄色网址 | 亚洲色成人网站www永久四虎 | 天堂视频中文在线 | 高清在线一区二区三区 | 伊人快播 | 亚洲第一大综合区 | 成人福利网站在线观看 | 欧美大白bbbb与bbbb | 欧美午夜精品久久久 | 午夜影剧院 | 亚洲精品91天天久久人人 | 老妇高潮潮喷到猛进猛出 | 男人的天堂免费视频 | 国产av人人夜夜澡人人爽 | 欧美一级欧美三级在线观看 | 国产精品久久久久久久专区 | 亚洲一区二区三区香蕉 | 热99这里只有精品 | 国产午夜精品久久久 | 国产有码视频 | 屁股夹体温计调教play | 欧美日韩免费高清一区色橹橹 | 中文字幕精品一区二区三区视频 | 亚洲男人影院 | 国产无遮挡a片又黄又爽 | 国产区在线 | 日韩一区二区三区三四区视频在线观看 | 伊人伊色 | 中国一级特黄真人毛片免费观看 | 成年人黄国产 |