Razor TagHelper實現Markdown轉HTML

来源:http://www.cnblogs.com/seriawei/archive/2017/12/05/7988070.html
-Advertisement-
Play Games

Markdown是一種可以使用普通文本編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文本內容具有一定的格式。 ...


Markdown是一種可以使用普通文本編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文本內容具有一定的格式。

用途

Markdown的語法簡潔明瞭、學習容易,而且功能比純文本更強,因此有很多人用它寫博客。世界上最流行的博客平臺WordPress和大型CMS如Joomla、Drupal都能很好的支持Markdown。完全採用Markdown編輯器的博客平臺有Ghost和Typecho。

用於編寫說明文檔,並且以“README.MD”的文件名保存在軟體的目錄下麵。

除此之外,現在由於我們有了RStudio這樣的神級編輯器,我們還可以快速將Markdown轉化為演講PPT、Word產品文檔、LaTex論文甚至是用非常少量的代碼完成最小可用原型。在數據科學領域,Markdown已經被確立為科學研究規範,極大地推進了動態可重覆性研究的歷史進程。

TagHelper

寫一個Razor TagHelper來實現Markdown轉HTML,這裡需要使用到CommonMark. NET這個類庫。

namespace ZKEACMS.Message.TagHelps
{
    [HtmlTargetElement("markdown", TagStructure = TagStructure.NormalOrSelfClosing)]
    [HtmlTargetElement(Attributes = "markdown")]
    public class MarkdownTagHelper : TagHelper
    {
        public ModelExpression Content { get; set; }
        public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (output.TagName == "markdown")
            {
                output.TagName = null;
            }
            output.Attributes.RemoveAll("markdown");

            var content = await GetContent(output);
            var markdown = WebUtility.HtmlEncode(WebUtility.HtmlDecode(content));
            var html = CommonMarkConverter.Convert(markdown);
            output.Content.SetHtmlContent(html ?? "");
        }

        private async Task GetContent(TagHelperOutput output)
        {
            if (Content == null)
                return (await output.GetChildContentAsync()).GetContent();

            return Content.Model?.ToString();
        }
    }
}

使用方式

首先要在_ViewImports.cshtml加入這個TagHelper,像這樣

@addTagHelper *, ZKEACMS.Message

然後就可以直接使用了

<markdown>@item.CommentContent</markdown>

原文地址:http://www.zkea.net/codesnippet/detail/post-79


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

-Advertisement-
Play Games
更多相關文章
  • 功能 1.天氣預報 2.區域網對戰 展示 java學習群669823128 部分源碼 package game.weather; import java.util.HashMap; public class Weather { /** * @Fields 今天的天氣數據,整體 */ private ...
  • 在大多數大公司,像應用伺服器軟體的安裝、部署都是運維的事情,其實自己去嘗試部署一下,也是有收穫的。 周末在家無聊,正好嘗試了Linux下的rabbitMq安裝過程,做了記錄,希望有用到的人可以做下參考。 安裝環境: Linux: centOS 7.0 mini版 rabbitMq: 3.6.2 查詢 ...
  • 上一篇《Git命令彙總基礎篇》總結了使用Git的基本命令,這一篇作為補充主要給大家講一些平時使用中的技巧和總結 。 學會了這些命令,已經基本解決了使用Git中大部分問題。 1.gitignore 全局配置忽略文件 git config --global core.excludesfile ~/.gi ...
  • 題目描述 永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連接,通過橋可以從一個島 到達另一個島。如果從島 a 出發經過若幹座(含 0 座)橋可以到達島 b,則稱島 a 和島 b 是連 通 ...
  • S#語言的最全能類型——字元串(對應C#的String),可用於表示文本內容,如"S#公式是很有特色"等。S#的字元串輸入格式有三種:"xxxxx",@"xxxxx"和'xxxxx'。在S#語言設計時字元串的地位是很高的,系統把它也看成是“程式即數據、數據即程式”的全能表達方式之一。 ...
  • 最近要做個winform的東西,要在裡面集成一個類似Windows自帶畫圖的標尺功能,還要能在圖片上畫矩形框。在網上找了好久也沒找到寫好的控制項,無奈自己做了一個。 目前還有些bug,這裡先做個分享。(Ps:很少做winform的東西,做的不好,輕噴。另外歡迎指點。) 由於最後要做的東西的背景是黑的, ...
  • 東西不是很複雜,不過百度出來的,貌似都是一種,代碼太長了,複製都不想複製,來個簡易版本的吧,直接貼代碼。 ...
  • 本節將分析 代碼。 源代碼參考.NET Core 2.0.0 "WebHostBuilder" "WebHost" "Kestrel" 問題概要 1. Hosting中有哪2個ServiceProvider,各自如何創建,以及有哪些ServiceCollection。 1. 什麼時候執行Startu ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...