ASP.NET Core 标记帮助器,用于有条件地将类添加到元素

2023-11-26

在Asp.Net MVC中,我们可以有条件地添加类,如下代码:

<div class="choice @(Model.Active?"active":"")">
</div>

如何通过使用 tagHelper 并删除条件中的其他部分来做到这一点。


能够按照 tagHelper 提供的方式添加条件 css 类。 此代码类似于 AnchorTagHelper asp-route-* 用于添加路由值的行为。

[HtmlTargetElement("div", Attributes = ClassPrefix + "*")]
public class ConditionClassTagHelper : TagHelper
{
    private const string ClassPrefix = "condition-class-";

    [HtmlAttributeName("class")]
    public string CssClass { get; set; }

    private IDictionary<string, bool> _classValues;

    [HtmlAttributeName("", DictionaryAttributePrefix = ClassPrefix)]
    public IDictionary<string, bool> ClassValues
    {
        get {
            return _classValues ?? (_classValues = 
                new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase));
        }
        set{ _classValues = value; }
    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        var items = _classValues.Where(e => e.Value).Select(e=>e.Key).ToList();

        if (!string.IsNullOrEmpty(CssClass))
        {
            items.Insert(0, CssClass);
        }

        if (items.Any())
        {
            var classes = string.Join(" ", items.ToArray());
            output.Attributes.Add("class", classes);
        }
    }
}

在 _ViewImports.cshtml 中添加对 taghelper 的引用,如下所示

@addTagHelper "*, WebApplication3"

在View中使用tagHelper:

<div condition-class-active="Model.Active" condition-class-show="Model.Display">
</div>

Active = true 和 Display = true 的结果是:

<div class="active show">
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 标记帮助器,用于有条件地将类添加到元素 的相关文章

随机推荐

  • 跨翻译单元和 gcc 4.6 自动内联函数

    如果我不将函数 f 声明为内联 如下 A h X f Y y A cpp X f Y y 然后在不同的翻译单元中 B cpp include A h Z g W w f 然后我用 gcc 4 6 编译两个翻译单元 A o 和 B o 然后也
  • 如何从控制器返回特定的状态代码并且没有内容?

    我希望下面的示例控制器返回没有内容的状态代码 418 设置状态代码很容易 但似乎需要做一些事情来表明请求结束 在 ASP NET Core 之前的 MVC 中或在 WebForms 中 可能会调用Response End 但它在 ASP N
  • C# 中的条件变量 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 C 中使用条件变量和监视器吗 有人能给我举个例子吗 与仅用于在 NET 中发出信号的条件变量等效的是抽象 WaitHandle 类 它的实际实现是 ManualResetEven
  • Xamarin Forms共享首选项交叉

    我想知道以跨平台方式操作应用程序设置的最佳解决方案是什么 在 iOS 中 我们可以在设置屏幕中更改应用程序外部的设置 但在 Windows Phone 和 Android 中则没有此功能 因此 我的想法是在应用程序内创建一个普通页面 屏幕
  • 用于开发 Flash 应用程序的最佳开源工具是什么?最好从哪些地方开始学习? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 就工具而言 我知道Haxe MTASC and swfmill 您能提供与其中任何一个相关的成功或恐怖故事吗 还有其他我应该调查的吗 在学习方面 Adobe 开发人员连接似乎包含不错的参考
  • 如何在 Three.js 中使用 gltf 模型投射阴影?

    嘿 我是三个 js 的新手 想知道如何用 gltf 模型投射阴影 我可以看到这是可能的 因为它正在工作here我假设我没有正确构建我的代码 var model new THREE GLTFLoader model load https th
  • Android Studio 测试显示测试结果 0/0。我怎样才能开始测试?

    我正在 Android Studio 中学习 Kotlin 初学者课程 在测试阶段 检测结果总是0 0 我怎样才能完成这些测试 代码由 Google Android 开发人员编写 应该可以完美运行 我用的是同样的 应用程序编译没有错误 代码
  • 应用程序特定的权限设置不授予本地激活权限

    我的一位同事建议我可以在 GPO 中修复此错误 它是 Windows 2016 服务器 The application specific permission settings do not grant Local Activation p
  • 画布不在自定义视图中绘制

    我创建了一个自定义视图 CircleView 如下所示 public class CircleView extends LinearLayout Paint paint1 public CircleView Context context
  • 停止从 selenium webdriver 加载浏览器

    我的 selenium webdriver 转到一个页面并等待该页面完成加载 如果超过 30 秒 则会超时并且脚本失败 有没有办法让网络驱动程序在 30 秒后停止页面加载 比如按浏览器上的 x 这将防止我的驱动程序超时 我正在使用 Chro
  • 将文件发送到回收站

    目前我正在使用以下功能 file Delete 但是如何使用此函数将文件发送到回收站而不是直接删除它呢 Use 文件系统 删除文件并指定正确的回收选项 虽然这适用于 UI 交互式应用程序 但它不适用于非 UI 交互式应用程序 例如 Wind
  • 在类定义之外定义方法?

    class MyClass def myFunc self pass 我可以创建吗MyFunc 在类定义之外 甚至可能在另一个模块中 是的 您可以在类外部定义函数 然后在类主体中将其用作方法 def func self print func
  • Spring-boot调度器在没有@EnableScheduling注解的情况下运行

    我按照此示例在示例项目中创建计划任务 https spring io guides gs scheduling tasks 它说 EnableScheduling ensures that a background task executo
  • ChromeOptions 使用 Selenium ChromeDriver for node.js 导致引用错误

    我正在尝试使用 Selenium 的 ChromeDriver 驱动程序来使用 Chrome 运行一些测试 但是当我使用时出现引用错误ChromeOptions My Code 我想强制使用某些选项 例如针对特定的用户配置文件进行测试 基于
  • 八度向量解包

    Octave matlab 用于处理多个返回值的表示法 a b f x 表明 f x 返回的值是一种行向量 并且 Octave 支持向量解包 就像 Python 的元组解包 然而当我把 a b 1 2 I get 错误 常量表达式的输出参数
  • PHP 脚本被杀死且没有任何解释

    我按以下方式启动我的 php 脚本 bash cd path php f scriptname php php 脚本运行时没有任何输出 一段时间后 php 脚本响应 Killed 我的想法是它达到了内存限制 ini set memory l
  • 实体框架 6:检测关系变化

    在我的 DbContext 子类中 我重写了 SaveChanges 方法 因此我可以实现一种类似触发器的功能 在实际保存更改之前 现在 在其中一些触发器中 有必要检测某些关系是否发生了变化 无论是多对多 一对一 零等 我在互联网上阅读了许
  • 使用 GROUP BY 检索满足条件的记录

    我现在只想从几千条记录中选择计数大于 1 的行 换句话说 重复项 我主要看到的是 1 和一些 2 和 3 SELECT count AS Number GI FROM GeneralInformation AS GI GROUP BY Fi
  • 如何在 Android 客户端获取订阅的到期日期?

    我们正在 Android 中使用应用内购买来实现订阅 我们正在获取如下格式的购买时间戳 orderId GPA 1234 5678 9012 34567 packageName com example app productId examp
  • ASP.NET Core 标记帮助器,用于有条件地将类添加到元素

    在Asp Net MVC中 我们可以有条件地添加类 如下代码 div class div 如何通过使用 tagHelper 并删除条件中的其他部分来做到这一点 能够按照 tagHelper 提供的方式添加条件 css 类 此代码类似于 An