这当然是可能的,但我只是稍微挖掘了一下来源,我认为你会发现它的麻烦远大于它的价值。您必须从多个类派生并覆盖方法,然后您必须连接所有自定义内容来代替内置函数。
添加Display
属性并不是真正的负担,坦率地说,它的意图更加明确,这总是一件好事。但是,如果您坚决反对使用它,则可以考虑使用Humanizer之类的库,然后执行以下操作:
@nameof(Model.ProposalNotes).Titleize();
FWIW,您需要将 using 语句添加到您的视图 ( @using Humanizer
),但您可以在_ViewImports.cshtml
.
此外,根据您实际想要的显示名称,您始终可以创建一个自定义标签助手。例如,要使用标签自动执行此操作,您可以简单地继承自(或创建您自己的)并使用您自己的自定义逻辑来确定要在此处LabelTagHelper
显示的显示名称,而不必担心更改诸如. 您还可以创建一个自定义标签助手以仅输出上述标题名称: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());
}
}
然后:
<titleize asp-for="ProposalNotes" />
诚然,对于如此简单的事情来说,这有点矫枉过正,但是LabelTagHelper
如果实际应用了该属性,您也可以通过窃取支持自定义显示名称的逻辑来加强它。