Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义标记帮助器isn';不要在页面上解释_C#_Asp.net Core_Razor Pages_Asp.net Core Tag Helpers - Fatal编程技术网

C# 自定义标记帮助器isn';不要在页面上解释

C# 自定义标记帮助器isn';不要在页面上解释,c#,asp.net-core,razor-pages,asp.net-core-tag-helpers,C#,Asp.net Core,Razor Pages,Asp.net Core Tag Helpers,我尝试向我的项目中添加一个自定义标记帮助器,将标记文本转换为html。 对于转换,我尝试使用Makrdig.Markdown和CommonMarkConverter.Convert,但没有成功,但我认为问题在于没有通过razor页面检测到我的实现 我的TagHelper: using Markdig; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspN

我尝试向我的项目中添加一个自定义标记帮助器,将标记文本转换为html。 对于转换,我尝试使用Makrdig.Markdown和CommonMarkConverter.Convert,但没有成功,但我认为问题在于没有通过razor页面检测到我的实现

我的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是位于我的viewmodel中的一个属性,链接到当前视图,它是一个带有[BindProperty]的公共字符串

<markdown for-content="HelloMarkdown"> </markdown>

最后,如果我在浏览器中检查html代码,它似乎会逐字解释,因此与代码中的内容相同:

<markdown for-content="HelloMarkdown"> </markdown>

而我想得到这样的东西

<markdown-helper><p><em>Hello World</em></p></markdown-helper>
你好,世界


欢迎来到StackOverflow

我仔细阅读了Adam Freeman的ASP.NET Core MVC 2书籍,发现您的
\u ViewImports.cshtml
声明看起来很奇怪,并且在中发现您很可能使用了无效语法

根据文档,它应该是这样的(注意
,而不是空格):

第二个参数sholud指向程序集的名称或简称,然后第一个参数告诉我们要使用给定程序集中的哪些类。您当前的声明是“从
CustomTagHelpers.Helpers
assembly导入所有类”,该声明不存在(它是一个命名空间)。至于空格后面的第三部分,老实说,我不知道该怎么解释,很可能被忽略了

您还可以使用以下语法:

@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)
...
\u ViewImports.cshtml
文件:

@addTagHelper CustomTagHelpers.Helpers.MarkdownTagHelper, CustomTagHelpers
重建后,标记辅助对象可见:

当然,您也可以使用
@addTagHelper*、CustomTagHelpers
导入程序集的所有类

那么默认的
@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
似乎是一个名称空间(),又如何呢?这实际上是dll文件(程序集)的名称。您可以在这里找到它:
%USERPROFILE%\.nuget\packages\microsoft.aspnetcore.mvc.taghelpers\2.0.0\lib\netstandard2.0
或类似目录。以下是它的源代码:。
Microsoft.AspNetCore.Mvc.TagHelpers
只是类库/程序集的名称。我们也可以通过将项目的structire更改为以下内容来实现同样的目的:

| Sample (sln)
|- CustomTagHelpers.Helpers (classlib)
|-- MarkdownTagHelper.cs (Your code with CustomTagHelpers.Helpers namespace)
|- Sample (mvc project)
...

然后我们可以使用
@addTagHelper*、CustomTagHelpers.Helpers

您是对的,我的ViewImport声明是错误的,我尝试了许多不同的方法在ViewImport中添加此声明,包括您的建议,但仍然不起作用。如何获取MarkdownTagHelper所在的程序集的名称?我以前认为它必须指向名称空间。哦。。。是的,我的错。实际上,通过让您尝试
@addTagHelper*、CustomTagHelpers.Helpers.MarkdownTagHelper
,我做了与您相同的事情—没有输入程序集名称,而是输入类(.)的FQN。检查我的最新答案。
| Sample (sln)
|- CustomTagHelpers.Helpers (classlib)
|-- MarkdownTagHelper.cs (Your code with CustomTagHelpers.Helpers namespace)
|- Sample (mvc project)
...