首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

拋棄 NVelocity,擁抱原生 Razor 引擎實現靜態頁生成

     編輯:關於.NET

動機

傳統模板引擎 (NVelocity 等) 非原生、無智慧感知、語法陌生。Razor 作為 ASP.NET MVC 內建視圖引擎,具備 C# 原生語法、完整 IntelliSense、編譯時期檢查,極適合靜態頁生成、離線報表、郵件模板等場景。

核心套件:RazorEngine (NuGet)

Install-Package RazorEngine

官方 CodePlex:https://razorengine.codeplex.com/

RazorEngine 套件

四大核心功能實戰

1. 簡單佔位符替換

string template = "你好,@Model.Name!今天是 @DateTime.Now.ToShortDateString()。";
var result = Razor.Parse(template, new { Name = "張三" });
// 輸出: 你好,張三!今天是 2017/01/04。
佔位符替換結果

2. 流程控制 (if、foreach 等)

模板檔案 (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);
流程控制輸出結果

3. 自訂全域輔助方法

繼承 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
自訂方法效果

4. 版面嵌套 (Layout/Partial)

RazorEngine 不支援原生 @Layout,採用 預編譯 + Include 模式:

  1. Header.cshtml (共用片段)
<header><h1>@Model.Title</h1></header>
Header 模板
  1. Index.cshtml 引用:
@Include("Header", Model)  @* 第一參數為編譯後的名稱 *@
<div>內容區...</div>
Index 引用 Header
  1. 後端預編譯 Header:
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# 開發體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved