Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖DisplayNameFor()的默认约定_C#_Asp.net Core_Displayname Attribute - Fatal编程技术网

C# 覆盖DisplayNameFor()的默认约定

C# 覆盖DisplayNameFor()的默认约定,c#,asp.net-core,displayname-attribute,C#,Asp.net Core,Displayname Attribute,我有很多带有PascalCase名称的财产名称 例如: public string ProposalNotes { get; set; } 我在重写默认的Html.DisplayNameFor()方法以自动将属性名称拆分为“建议注释”后,无需添加如下显示属性: [Display(Name = "Proposal Notes")] 我希望DisplayName属性在需要覆盖此新约定时仍然有效。例如,当我有像“PgCodeInst”到“机构代码”这样的财产名称时 有没有办法做到这一点 我记得有一

我有很多带有PascalCase名称的财产名称

例如:

public string ProposalNotes { get; set; }
我在重写默认的Html.DisplayNameFor()方法以自动将属性名称拆分为“建议注释”后,无需添加如下显示属性:

[Display(Name = "Proposal Notes")]
我希望DisplayName属性在需要覆盖此新约定时仍然有效。例如,当我有像“PgCodeInst”到“机构代码”这样的财产名称时

有没有办法做到这一点


我记得有一篇关于如何做类似事情的教程,但找不到

这当然是可能的,但我只是对来源进行了一点挖掘,我想你会发现它的麻烦远远超过它的价值。您必须从多个类派生并重写这些类上的方法,然后您必须连接所有自定义内容来代替内置内容

添加
Display
属性实际上并不是一个很大的负担,坦率地说,它的意图更加明确,这总是一件好事。但是,如果你坚决反对使用它,你可能会考虑使用一个类库,然后做一些类似的事情:

@nameof(Model.ProposalNotes).Titleize();
FWIW,您需要将using语句添加到视图中(
@using Humanizer
),但您可以在
\u ViewImports.cshtml
中只添加一次

此外,根据实际需要的显示名称,您始终可以创建一个。例如,要对标签自动执行此操作,您可以简单地从继承(或创建自己的)并使用自己的自定义逻辑来确定要在其中显示的显示名称,而无需担心更改类似
DisplayNameFor
的行为。您还可以创建自定义标记帮助器,仅输出标题化名称,如上所示:

public class TitleizeTagHelper : TagHelper
{
    const string ForAttributeName = "asp-for";

    [HtmlAttributeName(ForAttributeName)]
    public ModelExpression For { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "span";
        output.SetContent(For.Name.Titleize());
    }
}
然后:



诚然,对于如此简单的东西来说,这有点过分了,但是您可以通过从
LabelTagHelper
中窃取逻辑来支持自定义显示名称,从而增强它,如果实际应用了该属性。

是上的第二个链接。抱歉,我应该已经指出它是针对ASP.NET核心的。您能提供您使用的代码吗?我有一个想法,但我需要查看代码。处理方法的最后一行必须是
output.Content.SetContent(…)
<titleize asp-for="ProposalNotes" />