- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我找不到任何方法可以为 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();
}
}
}
我希望能够使用以下两种语法来引用我的标签助手
<li idi='false'>content</li>
<li in-dom-if="true">content2</li>
我做了一些研究,发现了诸如 this one 之类的帖子在 SO 上,但同时需要两个标记(基本上是一个 AND 子句)。
我仍然尝试用 "idi,in-dom-if"
和 "[idi],[in-dom- if]"
最后一个实际上给了我一个错误:无效的标签助手绑定(bind)属性
Admin.TagHelpers.InDomIfTagHelper.InDomIf'. Tag helpers cannot bind to HTML attributes with name '[idi],[in-dom-if]' because the name contains a ']' character.
我也尝试了这个 "[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
{ /* … */ }
如您所见,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();
}
}
}
至于idi,in-dom-if
或 [idi],[in-dom-if]
语法,这仅在 HtmlTargetElement
上受支持属性。它用于设置多个属性选择器都需要匹配以便HtmlTargetElement
匹配一个元素并激活标签助手。所以一个[HtmlTargetElement(Attributes = "idi,in-dom-if")]
实际上只会在同时存在 idi
时激活标签助手和一个in-dom-if
元素上的属性(这显然不是您想要的)。
关于HtmlAttributeName
attribute 但是,只能有一个属性名称,因为它必须是明确的一对一映射。那就是在您的尝试中引发错误的原因。这也是我们必须使用上面两个属性的原因。
关于c# - 标记助手 `Attributes` 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46717970/
有时我需要(为了让我的开发更快)在我的代码中对一些东西进行硬编码。这可能是凭据,或者可能只是一个允许我测试某些功能的 hack。由于很多原因,我从来不想将这段代码推送到主代码库甚至开发分支。一段时间以
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我经常发现自己从类中提取常见行为到只包含一组静态方法的帮助程序/实用程序类中。我经常想知道是否应该将这些类声明为抽象类,因为我真的想不出实例化这些类的正当理由? 将这样的类声明为抽象类的优点和缺点是什
如果我这样做: $obj = factory(Object::class)->make(); collect($obj); 我返回了一个类型的集合: Illuminate\Support\Collec
我有一个应用程序,我可以在其中列出 parent 和 child 。当我添加一个 child 时,我需要获得一个 parent 列表作为下拉列表显示。有没有类似 collection_select 的
我有渲染组件( source ),用于从 Controller 字段渲染组件/助手。它适用于 ember 1.9.1,但在更新到 ember 1.12.1 后,我发现 API 发生了变化。之后upda
我刚开始使用 Rails,还有很多东西需要学习,所以我可能会比平常更频繁地在 Stackoverflow 上询问初学者 Rails/Ruby 问题。 我只是想弄清楚 Helpers 在 Rails 中
我在 Web 上使用 VS Express 2012。我的项目是一个 MVC 4 项目。 我正在尝试创建一个助手来创建一个菜单项,该菜单项是带有标签的 png 图像。我几乎剪切并粘贴了这段代码: Ac
我正在尝试在我的 Vue 页面中映射我商店的状态变量: export default { data: () => ({ localData: []
我目前正在开发一个 Rails 插件,用于生成 iPhone 特定的 HTML 元标记。我尝试使用 ActionView::TestCase 进行单元测试,但不断收到相同的错误。请参阅下面的文件内容和
我正在努力解决一个与变量声明相关的非常基本的问题。我已经阅读了有关变量的所有内容,但我不知道我的问题是否与 1) 我如何声明变量或 2) 我如何设置变量的范围有关。 首先,我对 Meteor 中变量的
我想知道是否可以将参数传递给 Meteor Helper 并在 HTML 中插入返回对象的属性,而不仅仅是返回最终值。我有这样的东西: HTML: {{#each conversation}}
我正在尝试为我的 Ember 应用程序构建一个新的条件助手。值得一提的是,我正在使用使用 Handlebars 2.0 的 Ember 1.10.1,并且我无法升级它,如果能很好地解决这个版本的 Em
我最近从 Dreamweaver 迁移到 aptana,并尝试使 aptana 尽可能相似;) 已经做了很多更改,但我仍然找不到使代码字体变小的方法(在 Dreamweaver 中代码更清晰,因为字体
我有以下模板: {{#each helperOne "1" "2" }} Lorem upsom {{#each}} helper : template.tempName.h
我有这个简单的代码块,它位于我的一个模板上,但我想将其作为助手放置,以便我的所有 View 都可以访问它。 @hidden(field: Field) = { @defining(field)
使用正则表达式,我正在替换 **text in bold**至 text in bold在一个字符串中,然后显示 message使用 {{{message}}}在我的 EmberJS 模板上。问题是我
是否有任何非常有用和健壮的 C++ 网络库?和库来帮助他们更好地运行?诸如使用 << 时自动进行字节序转换之类的东西,阻止读取直到结构或 w/e 您的读取完全传输,有助于调试协议(protocol)的
模板 {{#each tags}} {{#isObject this}} Object {{else}}
我有返回 JSON 的函数: Template.mainmenu.menuitem = function() { var jsonObj = { items: [ { ur
我是一名优秀的程序员,十分优秀!