【发布时间】: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>
我没有错误或异常,只是没有渲染。
编辑
这里是单独的项目,没有工作 <email> 助手。
https://github.com/petrck/dotnet-taghelper-sample
【问题讨论】:
-
不幸的是,我无法知道发生了什么,但只是作为一个提示:您不需要(或不应该)在
HtmlTargetElement属性中列出所有元素的属性。该属性用于匹配标签助手用法,并且对于每个属性用法,都需要应用所有约束。因此,例如,如果您为这个问题省略了一些(可选)属性,这可能就是这里的问题。只需执行[HtmlTargetElement("blob")]并且不需要任何属性,只需使用HtmlAttributeName属性映射它们即可。
标签: c# razor asp.net-core asp.net-core-tag-helpers