将冒号和星号添加到帮助生成的标签中

use*_*526 4 asp.net-mvc razor razor-declarative-helpers

我在.NET 4.5 MVC应用程序中使用Razor和Data Annotations.这是一个视图模型:

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

    [Display(Name = "Comments:")]
    public string Comments { get; set; }
Run Code Online (Sandbox Code Playgroud)

有没有办法删除那些显示属性并在生成的名称后面有冒号(冒号,空格,必填字段的星号)?在错误消息中,不应显示冒号.

Rap*_*aus 6

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

如果你想要LabelFor:

<PropertyName> :
Run Code Online (Sandbox Code Playgroud)

当你有一个必需的属性

<PropertyName> : *
Run Code Online (Sandbox Code Playgroud)

您可以尝试使用Custom 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这个,你必须把

ModelMetadataProviders.Current = new CustomModelMetadataProvider()
Run Code Online (Sandbox Code Playgroud)

在 Application_Start()你的Global.asax.cs

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