首页 > 解决方案 > 在 .NET Core 5 ViewModel 中本地化没有名称属性的显示 DataAnnotation

问题描述

我有

[Required]
[Display(Name ="Email")]
public string Email { get; set; }

[Required]
[Display (Name = "Password")]
public string Password { get; set; }

在我的视图模型中。我可以将其本地化。此外,与使用资源文件的默认 Microsoft 消息相比,我能够为“必需”消息 [无需手动指定 ResourceType 和 ResourceName] 设置不同的本地化。我是怎么做到的?链接在这里:

https://stackoverflow.com/a/41385880/931305

现在,我想删除“显示”的“名称”属性。因为大多数时候显示名称总是与实际的属性名称相同。如果您注意到两者都是“电子邮件”/“密码”。所以它会使代码看起来很干净。

我能够在经典的 ASP.NET MVC 中做到这一点。链接在这里:

https://haacked.com/archive/2011/07/14/model-metadata-and-validation-localization-using-conventions.aspx/

现在,如何在 .NET Core 5 中执行此操作?我无法使用IValidationAttributeAdapterProvider注入“显示”。[我得到了所有的“验证”属性,但没有显示]

标签: c#asp.net-coreasp.net-core-mvcasp.net-core-5.0

解决方案


你可以这样写一个属性

public sealed class MyDisplayAttribute : DisplayNameAttribute, IModelAttribute
{
    private string _name = string.Empty;

    public MyDisplayAttribute(string displayName) 
    {
        _name= displayName;
    }

    public override string DisplayName => _name;
    public string Name => nameof(MyDisplayAttribute);
}

用法:

public class MyModel
{ 
    [MyDisplay("MyString")]
    public string MyString { get; set; }
}

推荐阅读