我遵循了一些关于为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
Annnndd ......没什么。没有intellisense,没有替换标签...
有什么想法吗?
答案 0 :(得分:57)
您需要在视图导入文件中仅提供程序集名称。
_ViewImports.cshtml:
@addTagHelper *, ToolConstrolSystem
答案 1 :(得分:4)
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
上面的代码使用通配符语法(" *")来指定视图中的每个视图文件都可以使用指定程序集中的所有Tag Helpers(Microsoft.AspNetCore.Mvc.TagHelpers)目录或子目录。
答案 2 :(得分:3)
还要记住,目前(2020年3月).Net Core 3自动生成其中带有下划线的名称空间。但是,程序集名称将与文件夹名称完全相同(即使它确实包含空格和其他不常见的文件夹名称符号)。添加自定义标签帮助程序可能会造成麻烦。
我们假设:
cd
进入其中,并致电dotnet new mvc
***
@addTagHelper *, SUPER_TEST
***
这行不通。因为实际上您的程序集现在称为SUPER-TEST。 .Net Core运行时在创建新项目时用下划线替换下划线。
因此,您必须从SUPER-TEST导入标签帮助程序,如下所示:
***
@addTagHelper *, SUPER-TEST
***
答案 3 :(得分:2)
啊,我终于发现我的错误了。 @addTagHelper *, [needs assemply-name]
不是默认的命名空间名称!
对我来说:
@addTagHelper *, MyProject_Website
必须是:
@addTagHelper *, MyProject-Website
答案 4 :(得分:0)
因此,我浪费了一些时间在解决taghelper无法正常工作的问题上。过了一会儿,我去睡觉了,今天我又换了个新的尝试,然后才意识到,我并没有只在Views文件夹的Razor Pages文件夹中添加@addTagHelper。
因此,如果您喜欢我的/ Pages + / Views概念,请确保遍历所有_ViewImports.cshtml。 希望在这里留下这张纸条会提醒某人疲惫的大脑,以及是否有助于休息一下,散步或小睡。
答案 5 :(得分:0)
可以更快地搜索TagHelpers的一种方法是提供标签助手所在的命名空间,而不是星号,后者会出现在程序集中的任何地方。
@addTagHelper com.excellor.TagHelpers.*, excellor
excellor是程序集名称,com.excellor.TagHelpers是标记助手所在的名称空间。
请注意,只要您为标签助手命名,就无需输入以下内容。
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
答案 6 :(得分:0)
要检查是否发现无法通过以下呼叫设置内容:
output.Content.AppendHtml("<tags...>");
output.Content.SetHtmlContent("<tags...>");
用于检查您是否没有将标记帮助程序用作空/空元素,例如:
<my-tag-helper attr="value" />
要添加内容,标记助手必须具有结束标记:
<my-tag-helper attr="value"></my-tag-helper>
答案 7 :(得分:0)
我遇到了同样的问题,但这是由于@addTagHelper
行末出现了一个冒号,偶然的分号造成的。
我有:
@addTagHelper *, ToolConstrolSystem;
代替:
@addTagHelper *, ToolConstrolSystem
虽然该解决方案可以正常构建和运行,但是如果@addTagHelper
行包含分号,则标记帮助程序将无法正常工作。
答案 8 :(得分:0)
对于那些正确使用语法但将其视图和TagHelper放在单独项目中的人:
它将起作用。