标记助手中的可选属性

Mis*_*pic 2 asp.net-mvc razor asp.net-core-mvc tag-helpers

我有一个标签助手,沿着以下几行:

[HtmlTargetElement("foo", Attributes = "bar")]
public class FooTagHelper : TagHelper

[HtmlAttributeName("bar")]
public bool Bar { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我将以下内容添加到视图时,标记帮助程序按预期处理目标:

<foo bar="true"></foo>
Run Code Online (Sandbox Code Playgroud)

但是,我想做的是制作bar可选的,例如,<foo></foo>如果它已被取消,我希望它默认为false

这可能吗?该HtmlTargetElementAttribute.Attributes属性的源代码注释似乎表明不是:

//摘要:
一个逗号分隔的System.String属性名称,HTML元素必须包含
这些属性名称才能运行Microsoft.AspNet.Razor.TagHelpers.ITagHelper.*属性名称末尾的*用作前缀匹配.

Mat*_*ums 5

您可以删除"bar"作为必需属性.

您可以通过重写Process方法并检查属性是否存在来实现.如果没有,请使用其名称和值添加Bar属性.您可以显式设置值,false但默认情况下属性栏为false.

[HtmlTargetElement("foo")]
public class FooTagHelper : TagHelper
{
    [HtmlAttributeName("bar")]
    public bool Bar { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (!output.Attributes.ContainsName(nameof(Bar)))
        {
            output.Attributes.Add(nameof(Bar), Bar);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

干杯!

如果您尚未这样做,我建议您查看此处提供的文档https://docs.asp.net/projects/mvc/en/latest/views/tag-helpers/index.html.