Mat*_*LES 4 c# asp.net-core asp.net-core-tag-helpers
我找不到任何方法给netcore20中的单个标签助手(别名)赋予以下标签助手类定义多个名称
[HtmlTargetElement(Attributes = AttributeName)]
public class InDomIfTagHelper : TagHelper
{
private const string AttributeName = "idi,in-dom-if";
[HtmlAttributeName(AttributeName)]
public bool InDomIf { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
if (!InDomIf)
{
output.SuppressOutput();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用以下两种语法引用我的标记助手
<li idi='false'>content</li>
<li in-dom-if="true">content2</li>
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现帖子如这一对左右,但使得无论标签的需要(AND子句,基本上).
我仍然尝试定义我的Attributes属性"idi,in-dom-if"以及"[idi],[in-dom-if]"最后一个实际上给我一个错误:无效的标签帮助绑定属性
Admin.TagHelpers.InDomIfTagHelper.InDomIf".标记帮助程序无法绑定到名称为"[idi],[in-dom-if]"的HTML属性,因为该名称包含"]"字符.
我也尝试了这个"[name=idi],[name=in-dom-if]",我也在标签名称周围添加了引号......这些都没有用.
由于我似乎无法找到有关使用OR子句定义标记助手属性名称的更多信息,我想知道它是否可能...
我想避免在两个不同的类中定义两次相同的逻辑,因此它们可以具有相同的名称.
这甚至可能吗?如果是,我怎么能实现这个目标?
该HtmlTargetElement属性指定一组选择器,这些选择器需要匹配才能激活标记助手.如果要指定一组备用选择器,您只需添加另一个 HtmlTargetElement属性即可.
您可以HtmlTargetElement根据需要多次使用为标记帮助程序设置单独的选择器集.当有标签助手将激活一个 HtmlTargetElement具有其所有要求的匹配.
如果您有许多其他方法来激活标记助手,这可能会非常广泛.例如,内置内容AnchorTagHelper如下所示:
[HtmlTargetElement("a", Attributes = ActionAttributeName)]
[HtmlTargetElement("a", Attributes = ControllerAttributeName)]
[HtmlTargetElement("a", Attributes = AreaAttributeName)]
[HtmlTargetElement("a", Attributes = PageAttributeName)]
[HtmlTargetElement("a", Attributes = PageHandlerAttributeName)]
[HtmlTargetElement("a", Attributes = FragmentAttributeName)]
[HtmlTargetElement("a", Attributes = HostAttributeName)]
[HtmlTargetElement("a", Attributes = ProtocolAttributeName)]
[HtmlTargetElement("a", Attributes = RouteAttributeName)]
[HtmlTargetElement("a", Attributes = RouteValuesDictionaryName)]
[HtmlTargetElement("a", Attributes = RouteValuesPrefix + "*")]
public class AnchorTagHelper : TagHelper
{ /* … */ }
Run Code Online (Sandbox Code Playgroud)
如您所见,a标签和其中一个受支持的属性始终存在限制.因此,为了激活标记助手,必须在<a>元素上使用任何这些属性.
然而,这是不是可以映射两个属性相同的标签的辅助属性.所以,即使你可以指定两个不同的选择要匹配in-dom-if或idi属性,它是不可能对一个被对方的确切别名.您必须单独映射它们.但是你可以让它们共享相同的支持字段,因此你不需要在Process方法中同时处理它们:
[HtmlTargetElement(Attributes = AttributeName)]
[HtmlTargetElement(Attributes = ShortcutAttributeName)]
public class InDomIfTagHelper : TagHelper
{
private const string AttributeName = "in-dom-if";
private const string ShortcutAttributeName = "idi";
[HtmlAttributeName(AttributeName)]
public bool InDomIf { get; set; }
[HtmlAttributeName(ShortcutAttributeName)]
public bool InDomIfShortcut
{
get => InDomIf;
set => InDomIf = value;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
if (!InDomIf)
{
output.SuppressOutput();
}
}
}
Run Code Online (Sandbox Code Playgroud)
至于idi,in-dom-if或[idi],[in-dom-if]语法,仅在HtmlTargetElement属性上支持.它用于设置所有需要匹配的多个属性选择器,以便HtmlTargetElement匹配元素并激活标记助手.所以[HtmlTargetElement(Attributes = "idi,in-dom-if")]当有一个双方实际上只激活标签助手idi 和一个in-dom-if元素上的属性(这显然不是你想要的这里).
HtmlAttributeName但是,在属性上,只能有一个属性名称,因为它必须是明确的一对一映射.这就是在你的尝试中引发错误的事情.这也是我们必须使用上述两个属性的原因.
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |