[英]Custom tag helper not working
我遵循了一些关于为 ASP Core 创建自定义标签助手的指南。
这是我的帮手:
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
namespace ToolControlSystem.TagHelpers
{
[HtmlTargetElement("description", Attributes = DescriptionAttributeName, TagStructure = TagStructure.NormalOrSelfClosing)]
public class DescriptionTagHelper : TagHelper
{
private const string DescriptionAttributeName = "asp-for";
[HtmlAttributeName(DescriptionAttributeName)]
public ModelExpression Model { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
var description = GetDescription(Model.ModelExplorer);
output.TagName = "span";
output.TagMode = TagMode.StartTagAndEndTag;
output.Content.SetContent(description);
}
private string GetDescription(ModelExplorer modelExplorer)
{
string description;
description = modelExplorer.Metadata.Placeholder;
if (String.IsNullOrWhiteSpace(description))
{
description = modelExplorer.Metadata.Description;
}
return description;
}
}
}
我把它放在_ViewImports.cshtml
: @addTagHelper *, ToolConstrolSystem.TagHelpers
Annndd……没什么。 没有智能感知,没有标签替换......
有任何想法吗?
您只需要在视图导入文件中提供程序集名称。
_ViewImports.cshtml:
@addTagHelper *, ToolConstrolSystem
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
上面的代码使用通配符语法 ("*") 来指定指定程序集 (Microsoft.AspNetCore.Mvc.TagHelpers) 中的所有标记帮助程序将可用于 Views 目录或子目录中的每个视图文件。
还要记住,目前(2020 年 3 月).Net Core 3 会自动生成带有下划线的命名空间。 尽管如此,程序集名称将与文件夹名称完全相同(即使它确实包含空格和其他不常见的文件夹名称符号)。 添加自定义标签助手可能会导致麻烦。
让我们假设:
cd
到它和呼叫dotnet new mvc
***
@addTagHelper *, SUPER_TEST
***
这是行不通的。 因为实际上您的程序集现在称为 SUPER-TEST。 .Net Core 运行时在创建新项目时用破折号替换下划线。
因此,您必须从 SUPER-TEST 导入标签助手,如下所示:
***
@addTagHelper *, SUPER-TEST
***
啊,我终于发现我的错误了。 @addTagHelper *, [needs assemply-name]
不是默认的命名空间名称!
对我来说:
@addTagHelper *, MyProject_Website
必须是:
@addTagHelper *, MyProject-Website
我遇到了同样的问题,但这是@addTagHelper
行末尾的一个流氓、意外分号的@addTagHelper
。
我有:
@addTagHelper *, ToolConstrolSystem;
而不是:
@addTagHelper *, ToolConstrolSystem
虽然该解决方案可以正常构建和运行,但如果@addTagHelper
行包含分号,则标签助手将无法工作。
您可以更快地搜索 TagHelper 的一种方法是提供您的标记助手所在的命名空间,而不是星号,星号将在您的程序集中随处可见。
@addTagHelper com.excellor.TagHelpers.*, excellor
其中 excellor 是程序集名称, com.excellor.TagHelpers 是标签助手所在的命名空间。
请注意,只要您为标签助手命名空间,就不需要以下条目。
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
如果您发现无法使用以下调用设置内容,则要检查的另一件事是:
output.Content.AppendHtml("<tags...>");
output.Content.SetHtmlContent("<tags...>");
是检查您是否没有将标签助手用作空/空元素,例如:
<my-tag-helper attr="value" />
要添加内容,标签助手必须有一个结束标签:
<my-tag-helper attr="value"></my-tag-helper>
另一个导致我的标签助手无法工作的小技巧:
例如CustomButtonTagHelper
将作为custom-button
可用。
因此 pascal case 将被 kebab case 取代。
对于那些正确使用语法但在不同的项目中拥有他们的视图和他们的 TagHelper 的人:
它会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.