我尝试将自定义标签帮助程序添加到我的项目中,以将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>
参考方案
欢迎来到StackOverflow!
我发现亚当·弗里曼(Adam Freeman)的ASP.NET Core MVC 2书籍时,发现您的_ViewImports.cshtml
声明看起来很奇怪,并且在docs中发现您最有可能使用无效语法的确认。
根据文档,它应该是这样的(注意.
,而不是空格):
@addTagHelper *, MarkdownTagHelper
因为第二个参数sholud指向FQN或程序集的简称,然后第一个参数告诉我们要使用给定程序集中的哪些类。您当前的声明是说“从CustomTagHelpers.Helpers
程序集导入所有类”不存在(它是一个名称空间)。至于老白后的3ed部分,我不知道该如何解释,很可能会被忽略。
您还可以使用以下语法:
@addTagHelper CustomTagHelpers.Helpers, MarkdownTagHelper
但是我想您的意图是第一个从您的程序集中导入所有帮助者的意图。
请检查是否有帮助?我想可能是这样。
编辑:
我创建了一个简短的示例进行验证,是的-这与无效的@addTagHelper
语法有关。
创建新项目(dotnet new mvc -o Sample
)之后,为您的标签助手(程序集)(dotnet new classlib CustomTagHelpers
)创建一个lib,并将对该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
只是classlib / assembly的名称。我们还可以通过将项目的结构更改为以下方式来做同样的事情:
| Sample (sln)
|- CustomTagHelpers.Helpers (classlib)
|-- MarkdownTagHelper.cs (Your code with CustomTagHelpers.Helpers namespace)
|- Sample (mvc project)
...
然后我们可以使用@addTagHelper *, CustomTagHelpers.Helpers
。
在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…
ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…
如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…
ASP.NET Core MVC视图组件搜索路径 - c#在此处的文档中:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2 运行时在以下路径中搜索视图:/Views/{Controller Name}/Components/{View Component Name}/{View Nam…
ASP.NET MVC Core 3.0 API将枚举序列化为字符串 - c#如何在ASP.NET MVC Core 3.0中将Enum字段序列化为String而不是Int?我不能用旧的方式做。services.AddMvc().AddJsonOptions(opts => { opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter()); }) 我收到…