我尝试向我的项目中添加一个自定义标记帮助程序,以将markdown文本转换为html。 对于转换,我尝试同时使用Makrdig.Markdown和CommonMarkConverter.Convert,但均未成功,但是我认为问题出在没有通过剃须刀页面检测到我的实现。
我的TagHelper:
using Markdig;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace CustomTagHelpers.Helpers
{
[HtmlTargetElement("markdown")]
public class MarkdownTagHelper : TagHelper
{
[HtmlAttributeName("for-content")]
public ModelExpression Content { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagMode = TagMode.SelfClosing;
output.TagName = "markdown-helper";
var markdown = Content.Model.ToString();
//var html = CommonMarkConverter.Convert(markdown);
var html = Markdig.Markdown.ToHtml(markdown);
output.Content.SetHtmlContent(html);
}
}
我已将其添加到_ViewImports文件
@addTagHelper *, CustomTagHelpers.Helpers MarkdownTagHelper
这就是在我的视图中使用我的标签助手的代码,HelloMarkdown是位于我的视图模型中的一个属性,该属性链接到当前视图,它是带有[BindProperty]的公共字符串
<markdown for-content="HelloMarkdown"> </markdown>
最后,如果我在浏览器中检查html代码,它似乎是按字面解释的,所以它与代码中的相同:
<markdown for-content="HelloMarkdown"> </markdown>
我想得到类似的东西
<markdown-helper><p><em>Hello World</em></p></markdown-helper>
答案 0 :(得分:1)
欢迎使用StackOverflow!
当我发现您的_ViewImports.cshtml
声明看起来很奇怪,并且在docs中发现您最有可能在此处使用了无效语法时,我就读了Adam Freeman的ASP.NET Core MVC 2书。 / p>
根据文档,它应该是这样的(请注意.
,而不是空格):
@addTagHelper *, MarkdownTagHelper
作为第二个自变量指向FQN或程序集的简称,然后第一个自变量告诉我们要使用给定程序集中的哪些类。您当前的声明是说“从CustomTagHelpers.Helpers
程序集导入所有类”不存在(它是一个名称空间)。至于老实在空格后的3ed部分,我不知道如何解释,很可能会忽略。
您还可以使用以下语法:
@addTagHelper CustomTagHelpers.Helpers, MarkdownTagHelper
但是我想您的意图是第一个从您的程序集中导入所有助手的意图。
请检查是否有帮助?我想可能是这样。
编辑:
我创建了一个简短的示例进行验证,是的-这与无效的@addTagHelper
语法有关。
在创建新项目(dotnet new mvc -o Sample
)之后,为您的标签助手(程序集)创建了一个lib(dotnet new classlib CustomTagHelpers
),并将该lib的引用添加到主项目中,我最终得到了这个:
| Sample (sln)
|- CustomTagHelpers (classlib)
|-- Helpers (dir)
|--- MarkdownTagHelper.cs (Your code with CustomTagHelpers.Helpers namespace)
|- Sample (mvc project)
...
和_ViewImports.cshtml
文件:
@addTagHelper CustomTagHelpers.Helpers.MarkdownTagHelper, CustomTagHelpers
重建标签助手后可见:
当然,您也可以使用@addTagHelper *, CustomTagHelpers
从程序集导入所有类。
那默认的@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
似乎是名称空间(docs)呢?这实际上是dll文件(程序集)的名称。您可以在以下位置找到它:%USERPROFILE%\.nuget\packages\microsoft.aspnetcore.mvc.taghelpers\2.0.0\lib\netstandard2.0
或类似目录。这是它的源代码:link。 Microsoft.AspNetCore.Mvc.TagHelpers
只是类库/程序集的名称。我们还可以通过将项目的结构更改为以下方式来实现相同的目的:
| Sample (sln)
|- CustomTagHelpers.Helpers (classlib)
|-- MarkdownTagHelper.cs (Your code with CustomTagHelpers.Helpers namespace)
|- Sample (mvc project)
...
然后我们可以使用@addTagHelper *, CustomTagHelpers.Helpers
。