自定义标记助手无法正常工作

Mat*_*art 24 c# model asp.net-core asp.net-core-tag-helpers

我按照一些指南为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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我放弃了_ViewImports.cshtml:@addTagHelper *, ToolConstrolSystem.TagHelpers

Annnndd ......什么都没有.没有intellisense,没有替换标签......

有任何想法吗?

Anu*_*raj 74

您只需在视图导入文件中提供程序集名称.

_ViewImports.cshtml: 

@addTagHelper *, ToolConstrolSystem
Run Code Online (Sandbox Code Playgroud)

  • 这真的很烦人.谢谢你的穿着. (7认同)
  • 文档使它看起来像是命名空间,而不是程序集名称.\*faceplam\*. (7认同)
  • 哇,至少应该在文档中以粗体显示(!).花了几个小时猜测出了什么问题. (6认同)
  • 程序集名称!我有名称空间。直到我读完这篇文章,我们损失了3个小时。 (4认同)
  • Aaaaaaaaaaaaaaaaaaaaaaaarghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh 谢谢 (3认同)
  • 另外,程序集名称中不能有“_” (2认同)

小智 11

啊,终于发现我的错误了。@addTagHelper *, [needs assemply-name]不是默认的命名空间名称!

为我:

@addTagHelper *, MyProject_Website
Run Code Online (Sandbox Code Playgroud)

必须是:

@addTagHelper *, MyProject-Website
Run Code Online (Sandbox Code Playgroud)

查看您的项目属性!


Ric*_*SFT 8

请参阅管理标签助手范围

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
Run Code Online (Sandbox Code Playgroud)

上面的代码使用通配符语法 ("*") 来指定指定程序集 (Microsoft.AspNetCore.Mvc.TagHelpers) 中的所有标记帮助程序将可用于 Views 目录或子目录中的每个视图文件。


Nik*_*ski 6

另请记住,目前(2020 年 3 月).Net Core 3 自动生成带有下划线的命名空间。尽管如此,程序集名称将与文件夹名称完全相同(即使它确实包含空格和其他不常见的文件夹名称符号)。它可能会导致添加自定义标签助手时出现问题。

我们假设:

  1. 您有一个名为 SUPER-TEST 的文件夹
  2. cd进入它并打电话dotnet new mvc
  3. 这使得您的新项目具有命名空间“SUPER_TEST”。
  4. 您可以在此命名空间中创建一个标记助手,并将程序集名称包含到 _ViewImports 中,如下所示:
***
@addTagHelper *, SUPER_TEST
***
Run Code Online (Sandbox Code Playgroud)

这是行不通的。因为实际上您的组件现在称为“超级测试”。创建新项目时,.Net Core 运行时将下划线替换为破折号。

因此,您必须从 SUPER-TEST 导入标签助手,如下所示:

***
@addTagHelper *, SUPER-TEST
***
Run Code Online (Sandbox Code Playgroud)


Kli*_*ker 5

我也遇到了同样的问题,但这是行尾意外的分号的结果@addTagHelper

我有:

@addTagHelper *, ToolConstrolSystem;
Run Code Online (Sandbox Code Playgroud)

代替:

@addTagHelper *, ToolConstrolSystem
Run Code Online (Sandbox Code Playgroud)

@addTagHelper虽然解决方案可以正常构建并运行,但如果该行包含分号,则标记帮助器将不起作用。