傳統模板引擎 (NVelocity 等) 非原生、無智慧感知、語法陌生。Razor 作為 ASP.NET MVC 內建視圖引擎,具備 C# 原生語法、完整 IntelliSense、編譯時期檢查,極適合靜態頁生成、離線報表、郵件模板等場景。
Install-Package RazorEngine
官方 CodePlex:https://razorengine.codeplex.com/
string template = "你好,@Model.Name!今天是 @DateTime.Now.ToShortDateString()。";
var result = Razor.Parse(template, new { Name = "張三" });
// 輸出: 你好,張三!今天是 2017/01/04。
模板檔案 (index.cshtml):
@* 完整 C# 語法,享有智慧感知 *@
<!DOCTYPE html>
<html>
<head>
<title>@if (DateTime.Now.Hour == 23) { <text>午夜好</text> } else { <text>現在時間: @DateTime.Now</text> }</title>
</head>
<body>
<ul>
@foreach (var item in Model.StudentList) {
<li>@item.Name</li>
}
</ul>
</body>
</html>
後端呼叫:
var template = File.ReadAllText("index.cshtml", Encoding.GetEncoding("GBK"));
var model = new {
StudentList = new[] {
new { Name = "張三" },
new { Name = "李四" },
new { Name = "王五" }
}
};
var result = Razor.Parse(template, model);
繼承 TemplateBase<T> 擴充功能:
public abstract class MyCustomTemplateBase<T> : TemplateBase<T>
{
public string MyUpper(string name) => name.ToUpper();
}
註冊並使用:
Razor.SetTemplateBase(typeof(MyCustomTemplateBase<>));
var result = Razor.Parse("@MyUpper(Model.Name)", new { Name = "ctrip" });
// 輸出: CTRIP
RazorEngine 不支援原生 @Layout,採用 預編譯 + Include 模式:
<header><h1>@Model.Title</h1></header>
@Include("Header", Model) @* 第一參數為編譯後的名稱 *@
<div>內容區...</div>
var header = File.ReadAllText("Header.cshtml", Encoding.GetEncoding("GBK"));
var index = File.ReadAllText("Index.cshtml", Encoding.GetEncoding("GBK"));
Razor.Compile(header, "Header"); // 編譯為 "Header" 模板
var result = Razor.Parse(index, new {
Title = "我的測試頁面",
StudentList = new[] { new { Name="張三" }, new { Name="李四" } }
});
掌握 模型綁定、流程控制、自訂輔助方法、模板嵌套 四大核心功能,即可將 RazorEngine 應用於靜態站生成、報表導出、郵件模板等多種場景,享受原生 C# 開發體驗。