4

我在 .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; }

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

4

2 回答 2

6

您可以使用自己的自定义显示助手(类似于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()

Application_Start()你的Global.asax.cs

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

于 2012-10-18T17:15:21.497 回答
0

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>");
   }
});
于 2014-08-10T17:19:37.790 回答