日韩性视频-久久久蜜桃-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 的原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜福利三级理论电影 | 国产不卡在线视频 | 丁香婷婷成人 | 欧美极品jizzhd欧美爆 | 免费网站在线观看人数在哪动漫 | 久久91亚洲精品中文字幕奶水 | 欧美亚洲国产日韩 | 国产精品美女久久久久久久久 | 99人妻少妇精品视频一区 | 欧美精品电影一区二区 | 日韩综合在线视频 | 久久入口| 污视频91 | 伊人网狼人 | 少妇免费毛片久久久久久久久 | 88xx成人永久免费观看 | 青青青青青操 | 69国产精品视频 | 国产激情无套内精对白视频 | 老司机午夜福利视频 | 精品国产乱码久久久久久蜜臀网站 | 一级片在线免费观看视频 | 亚洲电影一区二区三区 | 不卡一区二区在线视频 | 欧美色图888 | 三上悠亚人妻中文字幕在线 | 91成人亚洲 | 2023av在线| 成人性生活免费视频 | 欧美一区二区精品 | 欧美色久 | 在线观看亚洲国产 | 免费视频日韩 | 日本激情免费 | wwwxxxx欧美| 男人av网站| 亚洲成a人在线观看 | 日韩精品aaa | 91在线无精精品一区二区 | 欧美久久久久久久久久久久 | www.黄色. | av之家在线 | 久久福利片 | 91福利视频网站 | 日本熟妇人妻中出 | 天天夜夜久久 | 欧洲亚洲一区二区 | 亚洲精品aa | 娇妻玩4p被三个男人伺候电影 | 欧美日本一二三区 | 曰本无码人妻丰满熟妇啪啪 | 999视频在线观看 | 亚洲免费一| 久久国产一区二区三区 | 国产xxxxx视频| 欧美精品 在线观看 | 蜜臀久久99精品久久久久久 | 波多野结衣在线电影 | 国产欧美精品一区二区色综合 | 女生被草| 国产精彩视频在线 | 91在线观看免费高清完整版在线观看 | 成人福利av| 精品视频在线免费看 | 国产高清免费观看 | 欧美四区 | 久久婷五月天 | 天天爽影院 | 日本高清不卡一区 | 亚洲欧美制服丝袜 | 国产伦精品一区二区三区在线 | 日韩欧美麻豆 | 亚洲va视频 | 羞羞羞网站 | 亚洲伦理影院 | 在线观看国产网站 | 日老女人视频 | xxxx日本高清| 国产精品亚洲专区无码牛牛 | 亚洲免费精品视频在线观看 | 国产精品一区二区无码免费看片 | 婷婷丁香五| 国产精品美女一区 | 青青色在线观看 | 日韩av在线免费看 | 亚洲激情自拍偷拍 | 97国产超碰 | 91午夜剧场 | 国产精品久久久久99 | 日韩乱码一区二区三区 | 国产一区不卡视频 | 蜜桃av导航 | 色峰视频 | 色先锋资源网 | 青草青在线视频 | 国产精品扒开腿做爽爽爽视频 | 中文乱码人妻一区二区三区视频 | 久色成人网 | 亚洲狼人天堂 |