ASP.NET Core MVC – Tag Helper 組件

来源:http://www.cnblogs.com/tdfblog/archive/2017/09/01/tag-helper-components-in-asp-net-core-mvc.html
-Advertisement-
Play Games

ASP.NET Core Tag Helpers系列目錄,這是第五篇,共五篇: "ASP.NET Core MVC – Tag Helpers 介紹" "ASP.NET Core MVC – Caching Tag Helpers" "ASP.NET Core MVC – Form Tag Help ...


ASP.NET Core Tag Helpers系列目錄,這是第五篇,共五篇:

Tag Helper 組件 - 簡介

之前我們已經在幾個文章中談到了Tag Helpers,這一次我們會討論其它有關的事情。

在 ASP.NET Core 2 還為我們帶來了一個新功能 - Tag Helper 組件

Tag Helper 組件負責生成或修改特定的HTML,它們與 Tag Helper 一起工作。

Tag Helper 將會運行您的 Tag Helper 組件。

Tag Helper 組件是動態地向HTML中添加內容最完美的選擇。

要使您的Tag Helper組件運行,您需要設置一個特定的Tag Helper。這個Tag Helper需要從內置的抽象類繼承 TagHelperComponentTagHelper

我知道,我知道這個命名非常令人困惑。

繼承自 TagHelperComponentTagHelper 的類型將是一個 Tag Helper,它將執行與之匹配的 Tag Helper 組件。

步驟

我們首先創建一個新的 Tag Helper 組件。我們可以創建針對內置 headbody 標簽的 Tag Helper 組件;從特殊類 TagHelperComponentTagHelper 繼承的
Tag Helper,都可以創建 Tag Helper 組件。

我們來看一個例子。

我將從創建新的 Razor Pages 模板開始:

    dotnet new razor

我們按如下步驟讓一個 Tag Helper 組件正常工作:

  1. 創建一個新的 Tag Helper 組件
  2. 將組件註入到DI
  3. 創建一個繼承自TagHelperComponentTagHelper的 Tag Helper 類
  4. 將 Tag Helper 包含在_ViewImports.cshtml文件中

創建一個新的 Tag Helper 組件:

    public class ArticleTagHelperComponent : TagHelperComponent
    {
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (string.Equals(context.TagName, "article", StringComparison.OrdinalIgnoreCase))
            {
                output.PostContent.AppendHtml("<script>console.log('ASP.NET Core - Love From Console');</script>");
            }
            return Task.CompletedTask;
        }
    }

如果您使用過 Tag Helper,那麼您應該很熟悉。在示例中,繼承自內置的TagHelperComponent抽象類,然後重寫ProcessAsync方法。

我們需要將 Tag Helper 組件成為我們應用程式的一部分,將其註入到服務容器中:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<ITagHelperComponent, ArticleTagHelperComponent>();
        services.AddMvc();
    }

現在我們可以使用創建的 Tag Helper 組件!

創建Tag Helper:

    [HtmlTargetElement("article")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public class ArticleTagHelperComponentTagHelper : TagHelperComponentTagHelper
    {
        public CodingBlastTagHelper(ITagHelperComponentManager componentManager, ILoggerFactory loggerFactory)
            : base(componentManager, loggerFactory)
        {
        }
    }

註意第一行,此 Tag Helper 助手的目標是HTML中的 所有 article 元素/標記。

為了讓我們的應用程式知道這個Tag Helper,我們必須將其添加到_ViewImports.cshtml文件中:

    @using IntroTagHelperComponent
    @namespace IntroTagHelperComponent.Pages
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    @addTagHelper SampleTagHelperComponent.ArticleTagHelperComponentTagHelper, SampleTagHelperComponent

要看到實際的效果,我們需要在代碼中至少有一個 article 標簽,所以,我們修改Index.cshtml頁面:

@model IndexModel
@{
    ViewData["Title"] = "Home page";
}
 
<div></div>
 
<article>
    TagHelperComponent will add stuff here.
</article>

針對內置 Tag Helper 的 Tag Helper 組件

目前有兩個內置的 Tag Helper 繼承自TagHelperComponentTagHelper類,它們位於 Microsoft.AspNetCore.Mvc.TagHelpers 程式集中 。

這兩個標簽助手是 HeadTagHelperBodyTagHelper。它們使我們很容易將內容註入 headbody 中。我們所要做的是創建 Tag Helper 組件並將其註入我們的應用程式中。

這是 HeadTagHelper 的代碼(aspnet/Mvc GitHub 倉庫):

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.ComponentModel;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Mvc.Razor.TagHelpers
{
    /// <summary>
    /// A <see cref="TagHelperComponentTagHelper"/> targeting the &lt;head&gt; HTML element.
    /// </summary>
    [HtmlTargetElement("head")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public class HeadTagHelper : TagHelperComponentTagHelper
    {
        /// <summary>
        /// Creates a new <see cref="HeadTagHelper"/>.
        /// </summary>
        /// <param name="manager">The <see cref="ITagHelperComponentManager"/> which contains the collection
        /// of <see cref="ITagHelperComponent"/>s.</param>
        /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
        public HeadTagHelper(ITagHelperComponentManager manager, ILoggerFactory loggerFactory)
            : base(manager, loggerFactory)
        {
        }
    }
}

代碼非常簡單,它從 TagHelperComponentTagHelper 類繼承,目標是 head HTML元素。

如果您查看預設的 _ViewImports.cshtml 文件內容,您將看到在預設情況下將包含這些內容:

@using IntroTagHelperComponent
@namespace IntroTagHelperComponent.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

我們可以將內置的 HeadTagHelper 使用我們的自定義 Tag Helper 組件來修改 head 標簽:

我們添加一個 Tag Helper 組件,它將檢查所有 head 標簽:

public class HeadTagHelperComponent : TagHelperComponent
{
    public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        if (string.Equals(context.TagName, "head", StringComparison.OrdinalIgnoreCase))
        {
            output.PostContent.AppendHtml("&lt;script&gt;console.log('head tag');&lt;/script&gt;");
        }
        return Task.CompletedTask;
    }
}

當然,我們需要將添加的HeadTagHelperComponent註入到我們的應用程式:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<ITagHelperComponent, HeadTagHelperComponent>();
        services.AddMvc();
    }

代碼

示例代碼在GitHub - SampleTagHelperComponent

總結

  • Tag Helper 組件可用於動態地向HTML中添加內容
  • 特殊 Tag Helper(從 TagHelperComponentTagHelper 類繼承)將執行所有匹配的 Tag Helper 組件

原文:《ASP.NET Core MVC – Tag Helper Components》https://codingblast.com/tag-helper-components/
翻譯:Sweet Tang
本文地址:http://www.cnblogs.com/tdfblog/p/tag-helper-components-in-asp-net-core-mvc.html
歡迎轉載,請在明顯位置給出出處及鏈接。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); //1. Reading from a binary Excel file ('97-2003 format; *.xls) IExcelDataRead ...
  • 有時我們會對一個list<T>集合里的數據進行去重,C#提供了一個Distinct()方法直接可以點得出來。如果list<T>中的T是個自定義對象時直接對集合Distinct是達不到去重的效果。我們需要新定義一個去重的類並繼承IEqualityComparer介面重寫Equals和GetHashCo ...
  • https://stackoverflow.com/questions/14796162/how-to-install-a-windows-font-using-c-sharp ...
  • 微信小程式給我們提供了一個很好的開發平臺,可以用於展現各種數據和實現豐富的功能,本篇隨筆介紹微信小程式結合後臺數據管理實現商品數據的動態展示、維護,介紹如何實現商品數據在後臺管理系統中的維護管理,並通過小程式的請求Web API 平臺獲取JSON數據在小程式界面上進行動態展示。 ...
  • <Style x:Key="RoundCornerTextStyle" TargetType="{x:Type TextBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Te ...
  • 在準備工作中,我們已經完成準備工作,接下來就是進行開發啦,應該怎麼來開發呢??容我想想。。。我覺得我們可以直接讓用戶的消息發送到微信的消息,轉到我們自己的伺服器上面!!感覺好厲害的樣子1.首先寫 驗證程式啦,這第一步的工作呢,就是驗證數據是不是來源於微信端的,如果不是來自微信伺服器端的,那就安逸了。 ...
  • TemplateBinding。 ControlTemplate最終會被用到一個控制項上,我們稱這個控制項為模板目標控制項或者模板化控制項,ControlTemplate裡面的控制項可以使用TemplateBinding將自己的某個屬性值關聯到模板控制項的某個屬性值上,必要的時候還可以添加Converter。例 ...
  • 文章內容描述: 本文檔使用C#語言開發,MVC框架調用百度第三方登錄OAuth2.0介面。 詳細步驟: http://developer.baidu.com/ 個人百度賬號,登錄百度開發平臺http://developer.baidu.com/ 。 如果沒有註冊: https://passport. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...