ASP .Net Core 自定义标记帮助器将 CamelCase 属性转换为空格

2023-12-20

在 ASP.Net Core 中,使用标签助手时是否可以自动转换视图模型中的驼峰式大小写属性名称,以将空格插入到相应的标签中?

如果我的视图模型看起来像这样......

[Display(Name = "First Name")]
public string FirstName { get; set; }

[Display(Name = "Last Name")]
public string LastName { get; set; }

[Display(Name = "Referral Date")]
public DateTime ReferralDate { get; set; }

似乎有很多应用数据注释的额外配置,例如

[显示(名称=“名字”)]

只需在单词之间插入空格即可。默认情况下,标记帮助程序会插入空格以避免这种手动配置和潜在的拼写错误,这是有道理的。

如果没有,自定义标签助手可以在这种情况下提供帮助吗?如果可以的话,它将如何工作?


如果你只关心label,您可以轻松覆盖标签标签助手.

[HtmlTargetElement("label", Attributes = "title-case-for")]
public class TitleCaseTagHelper : LabelTagHelper
{
    public TitleCaseTagHelper(IHtmlGenerator generator) : base(generator)
    {
    }

    [HtmlAttributeName("title-case-for")]
    public new ModelExpression For { get; set; }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        if (context == null)
            throw new ArgumentNullException("context");
        if (output == null)
            throw new ArgumentNullException("output");

        string name = For.ModelExplorer.Metadata.DisplayName ?? For.ModelExplorer.Metadata.PropertyName;
        name = name.Humanize(LetterCasing.Title);
        TagBuilder tagBuilder = this.Generator.GenerateLabel(
            this.ViewContext,
            this.For.ModelExplorer,
            this.For.Name,
            name,
            (object) null);
        if (tagBuilder == null)
            return;
        output.MergeAttributes(tagBuilder);
        if (output.IsContentModified)
            return;
        TagHelperContent childContentAsync = await output.GetChildContentAsync();
        if (childContentAsync.IsEmptyOrWhiteSpace)
            output.Content.SetHtmlContent((IHtmlContent) tagBuilder.InnerHtml);
        else
            output.Content.SetHtmlContent((IHtmlContent) childContentAsync);
    }
}

Usage

<label title-case-for="RememberMe" class="col-md-2 control-label"></label>

请确保放置使用语句 and @addTagHelper inside _ViewImports.cshtml.

@using YourNameSpace.Helpers
@addTagHelper *, YourNameSpace

Note

I use 人性化者 https://github.com/Humanizr/Humanizer仅英文 NuGet 包 -人性化核心 https://www.nuget.org/packages/Humanizer.Core。它比我自己编写的方法更健壮。如果您不喜欢开销,则可以使用正则表达式。

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

ASP .Net Core 自定义标记帮助器将 CamelCase 属性转换为空格 的相关文章

随机推荐

  • 创建之前执行的函数[重复]

    这个问题在这里已经有答案了 我不是 JavaScript 专家 但我发现了一些这样的代码 a function a alert a 我很惊讶地发现它可以工作 我认为类似的东西在 Python 中是行不通的 我期望该功能a创建之前不能执行 解
  • 语法突出显示不适用于 IVsInvisibleEditor

    我创建了 IVsInvisibleEditor 的实例 我使用以下代码来实现此目的 public IWpfTextViewHost CreateEditor string targetFile var componentModel ICom
  • 如何使用 JAVA 高级 REST 客户端发出 Elasticsearch 的 Point InTime API 请求

    如果有人可以向我指出一种使用 REST 高级客户端从 JAVA 或 JAVA 中的任何其他方式执行 Elasticsearch 7 10 1 中新引入的 Point In Time API 请求的方法 那将会很有帮助 传输客户端除外 因为它
  • 创建圆角矩形纹理2D

    我正在构建一个带有对话框的游戏 我希望能够以与最终幻想系列非常相似的风格以程序方式生成盒子的纹理 想像最终幻想VII http i79 photobucket com albums j148 Xngears Final 20Fantasy
  • 通过chrome浏览器扩展调用C dll

    我想通过访问智能卡winscard dll通过 Chrome 扩展 我是 Chrome 扩展开发的新手 但是据我所知 解压模式下的 chrome 扩展是一个由一些 html 页面 背景 普通 可选 覆盖 tabs create window
  • 使用 HTML5 fetch API 允许 Access-Control-Allow-Origin 标头

    我正在使用 HTML5 获取 API var request new Request https davidwalsh name demo arsenal json fetch request then function response
  • 单击 div 时在两个 div 之间翻转

    我想要与示例中相同的翻转 http jsfiddle net lakario VPjX9 http jsfiddle net lakario VPjX9 我想要的唯一不同是两个 div 之间的翻转 page1 page2 将在我单击 the
  • 在python中使用pyodbc获取MSSQL表列名

    我正在尝试使用 pyodbc 获取 mssql 表列名称 并收到错误消息 ProgrammingError No results Previous SQL was not a query 这是我的代码 class get Fields de
  • 我使用哪种 JSON 内容类型?

    有很多 标准 JSON http en wikipedia org wiki JSON内容类型 application json application x javascript text javascript text x javascr
  • 如何在D3条形图中添加分隔符

    我的应用程序中有一个使用 D3 绘制的条形图 下面添加了示例代码 在我的图表中 它显示了 12 个月时间段内的月份 因此 根据具体情况 12 月并不总是出现在 x 轴的拐角处 因此 为了显示年份的分隔 我想在图表中显示一个分隔符来分隔两年
  • 构建 FragmentStatePagerAdapter、ViewModel 和 Fragment 列表

    简介 以下问题 根据我的应用程序需求 我需要创建 TabLayout 和 ViewPager 扩展FragmentStatePAgerAdapter Viewpager 由一系列单类型片段组成 我们将其称为 ListFragment Eac
  • 如何将用户的输入添加到Python列表中[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 print This is your Shopping List firstItem input Enter 1st item print
  • Oracle:利用两个索引的优势

    正如您所看到的 Oracle 可以利用两个索引并解决整个查询 而无需通过 rowid 访问表 SELECT Scarti letture GAS tipo campo47 pdf COUNT 1 n FROM out CONSUMI GEE
  • 现有蓝牙设备和Apple MFI

    我正在开发一个需要连接到蓝牙设备的应用程序 我不想在应用程序商店中部署此应用程序 我只需要这个供个人使用 有什么办法可以连接到这个蓝牙设备 它太旧了而且绝对没有经过 MFI 认证 在 MFI 计划的常见问题解答中 http mfi appl
  • 根据 WooCommerce 购物车商品库存显示预计交货日期范围

    我正在尝试根据购物车中产品的库存状态输出购物车中的预计交货日期 我取得了一点成功 但现在我陷入了困境 这是我到目前为止所写的 它位于 function php 文件中 function lieferzeit global woocommer
  • Swift:RSA 使用特定私钥加密字符串

    我需要在 Swift 中编写一个方法 该方法使用特定的私钥来使用 RSA 加密时间戳 这不用于身份验证 而是验证服务器的客户端应用程序 我知道您通常会使用公钥进行加密以确保安全 我有一把钥匙 开始 RSA 私钥 MIICXAIBAAKBgQ
  • 在多个“it”语句中使用变量来跟踪 Cypress 中的变化

    我正在使用赛普拉斯 https www cypress io https www cypress io 来测试一个应用程序 该应用程序可以跟踪用户限制内完成的 API 调用量 该测试在 API 调用之前检查限制 并在调用之后再次检查 测试的
  • 令牌和规则之间的真正区别是什么?

    我因为 Raku 的内置语法而被它吸引 并想尝试一下并编写一个简单的电子邮件地址解析器 唯一的问题是 我无法让它工作 在找到真正可行的东西之前 我尝试了无数次迭代 但我很难理解为什么 归根结底 一切都在改变token to rule 这是我
  • 使用 Visual Studio 但带/不带 .NET 的 C/C++ GUI 应用程序

    我想学习 C C GUI Windows Linux 编程 哪个IDE更适合 如果我选择 Visual Studio NET 它的优点和缺点是什么 有没有同时支持 Windows 和 Linux 的 IDE The Qt Creator I
  • ASP .Net Core 自定义标记帮助器将 CamelCase 属性转换为空格

    在 ASP Net Core 中 使用标签助手时是否可以自动转换视图模型中的驼峰式大小写属性名称 以将空格插入到相应的标签中 如果我的视图模型看起来像这样 Display Name First Name public string Firs