如果你不想检查可选属性是否在 Html 中明确指定,你可以检查context.AllAttributes
,你不会像上一篇文章中output.Attributes
指定的那样找到它。
我注意到如果我在 Html.xml 中保留(可选)属性,我的 TagHelper 不会被渲染OnlyUrlOfMenuItem
。我只需要从上面Mat Hellums所述OnlyUrlOfMenuItem
的必需属性列表中删除该属性。因为我不希望这个属性出现在最终输出中,所以我不需要像上一篇文章中所说的那样添加属性。HtmlTargetElement()
output.Attributes.Add()
这是我的代码,其可选属性OnlyUrlOfMenuItem
的默认值为false
:
[HtmlTargetElement("a", Attributes = "MenuItem, LangCode")]
public class ATagHelper : TagHelper
{
readonly IFhpMenuProvider _fhpMenuProvider;
public ATagHelper(IFhpMenuProvider fhpMenuProvider)
{
_fhpMenuProvider = fhpMenuProvider;
OnlyUrlOfMenuItem = false;
}
[HtmlAttributeName("LangCode")]
public string LangCode { get; set; }
[HtmlAttributeName("MenuItem")]
public string MenuItemKey { get; set; }
[HtmlAttributeName("OnlyUrlOfMenuItem")]
public bool OnlyUrlOfMenuItem { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
MenuItem menuItem = _fhpMenuProvider.GetMenuItem(MenuItemKey, LangCode);
if (menuItem != null)
{
...
if (string.IsNullOrEmpty(menuItem.Tooltip) == false && OnlyUrlOfMenuItem == false)
{
output.Attributes.SetAttribute("title", menuItem.Tooltip);
}
if (string.IsNullOrEmpty(menuItem.Caption) == false && OnlyUrlOfMenuItem == false)
{
output.Content.SetContent(menuItem.Caption);
}
}
base.Process(context, output);
}