1. 程式人生 > >Razor TagHelper實現Markdown轉HTML

Razor TagHelper實現Markdown轉HTML

set mar comment ctu 流行 更強 import 編寫 normal

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

Razor TagHelper實現Markdown轉HTML