【问题标题】:TagHelper is not renderedTagHelper 未呈现
【发布时间】:2017-09-24 08:54:50
【问题描述】:

我在 .NET Core 2.0 中遇到了关于 TagHelpers 的有趣问题。原来的助手工作似乎是正确的。但海关不行。我编写了受代码启发的原始图像助手 (https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.TagHelpers/ImageTagHelper.cs),但仍然无法正常工作。

这是我的帮手:

namespace MyApp.TagHelpers
{
    [HtmlTargetElement("Blob", Attributes = FilenameAttributeName + "," + AltAttributeName, TagStructure = TagStructure.WithoutEndTag)]
    public class BlobTagHelper : TagHelper
    {
        public BlobTagHelper() { }

        private const string FilenameAttributeName = "filename";
        private const string AltAttributeName = "alt";

        [HtmlAttributeName(FilenameAttributeName)]
        public string Filename { get; set; }


        [HtmlAttributeName(AltAttributeName)]
        public string Alt { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "img";
            //...
        }
    }    
}

在 _ViewImports.cshtml 我有这个:

@using MyApp

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, MyApp //MyApp.TagHelpers

Razor 视图如下所示:

<blob filename="@mainImage.Filename" alt="@mainImage.Title" />

在 csproj 我有部门:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />

这个包应该有 TagHelpers 引用: https://www.nuget.org/packages/Microsoft.AspNetCore.all

页面上的最终结果如下:

<blob filename="babylon.jpeg" alt="babylon.jpg"></blob>

我没有错误或异常,只是没有渲染。

编辑

这里是单独的项目,没有工作 &lt;email&gt; 助手。 https://github.com/petrck/dotnet-taghelper-sample

【问题讨论】:

  • 不幸的是,我无法知道发生了什么,但只是作为一个提示:您不需要(或不应该)在 HtmlTargetElement 属性中列出所有元素的属性。该属性用于匹配标签助手用法,并且对于每个属性用法,都需要应用所有约束。因此,例如,如果您为这个问题省略了一些(可选)属性,这可能就是这里的问题。只需执行[HtmlTargetElement("blob")] 并且不需要任何属性,只需使用HtmlAttributeName 属性映射它们即可。

标签: c# razor asp.net-core asp.net-core-tag-helpers


【解决方案1】:

你遇到的问题在这一行:

@addTagHelper *, MyApp //MyApp.TagHelpers

虽然它看起来像注释,但 //MyApp.TagHelpers 在此行无效,并且会触发 TagHelper 发现逻辑。

只需删除该部分即可。即:

@addTagHelper *, MyApp

【讨论】:

  • 之所以可行是因为@addTagHelper 语法需要一个程序集名称作为其第二部分(而不是命名空间)。
猜你喜欢
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2017-03-19
  • 2020-09-24
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多