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

Razor 內幕:內嵌模板與 Helper 方法

     編輯:關於ASP.NET

前言

Razor 的內嵌模板功能鮮為人知,實則允許將標記片段作為委派傳遞給 Helper 方法。本文以 Repeat Helper 為例,解析模板產生的 IL 代碼與使用方式。

使用範例

@Repeat(10, @<li>List Item</li>);

輸出 10 個 <li>List Item</li>。

Helper 簽名

public static IHtmlString Repeat(int count, Func<dynamic, HelperResult> template)
{
    var result = new StringBuilder();
    for (int i = 0; i < count; i++)
        result.Append(template(null).ToHtmlString());
    return new HtmlString(result.ToString());
}
  • 第二參數為 Func<dynamic, HelperResult>,Razor 編譯器將 @<li>...</li> 轉換為可呼叫的委派。
  • HelperResult 封裝輸出寫入邏輯,支援串流式輸出。

編譯後代碼概念

__razor_template_writer.Write(Repeat(10, 
    new Func<dynamic, HelperResult>(__template_param) => {
        return new HelperResult(__tw => {
            __tw.Write("
  • List Item
  • "); }); }) ));

    進階:模板參數化

    @Repeat(5, @<li>Item @item.Index</li>);
    

    Helper 內可傳入模型物件:template(new { Index = i }),模板中透過 @item.Index 存取。

    總結

    內嵌模板將標記片段第一級化為可傳遞、可組合的程式碼單元,極大擴展 Razor 的表達能力,適合建構可重用 UI 組件庫。

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