【问题标题】:Add colons and stars to helper generated labels为助手生成的标签添加冒号和星号
【发布时间】:2026-02-03 10:00:01
【问题描述】:

我在 .NET 4.5 MVC 应用程序中使用 Razor 和数据注释。这是来自视图模型:

    [Required(ErrorMessage = "Title is required.")]
    [Display(Name = "Title: *")]
    public string Title { get; set; }

    [Display(Name = "Comments:")]
    public string Comments { get; set; }

有没有办法删除这些显示属性并在生成的名称后加一个冒号(冒号、空格、星号表示必填字段)?在错误消息中不应显示冒号。

【问题讨论】:

    标签: asp.net-mvc razor razor-declarative-helpers


    【解决方案1】:

    您可以使用自己的自定义显示助手(类似于LabelFor),或者

    如果你希望 LabelFor 是:

    <PropertyName> :
    

    当你有一个必需的属性时

    <PropertyName> : *
    

    您可以尝试使用自定义 DataAnnotationsModelMetadataProvider

    public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
    {
        protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
        {
            var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
            if (propertyName != null) {            
               metadata.DisplayName = (metadata.DisplayName ?? propertyName) + " : ";
               if (attributes.OfType<RequiredAttribute>().Any())
                  metadata.DisplayName +=" * ";
             }
            return metadata;
        }
    }
    

    要使用这个,你必须把

    ModelMetadataProviders.Current = new CustomModelMetadataProvider()
    

    在您的Global.asax.csApplication_Start()

    现在,我不确定错误消息中是否使用了metadata.DisplayName...我让你测试一下!

    【讨论】:

    • 谢谢 Althaus 先生,我会试试你的好解决方案 ;-)
    【解决方案2】:

    Raaphaels 解决方案对我有用。在这个帮助下,我将以下 JavaScript 放入我的布局文件中,以将星号染成红色。

    $('.control-label').each(function () {
       var textVal = $(this).html();
       if (textVal.indexOf("*") > 0) {
           var newTextVal = textVal.replace("*", "");
           $(this).html(newTextVal + "<span style='color:#ff0000'> *</a>");
       }
    });
    

    【讨论】: