c# - 使用 Asp.Net Core 获取 Controller 中的本地化显示属性

标签 c# asp.net-core

我有一个使用 DisplayAttribute 进行本地化的枚举类型、资源文件和内置本地化支持的 aspnetcore。我可以通过例如使用

成功验证本地化在 View 中是否有效
Html.GetEnumSelectList<TypeExample>(). 

如何在 Controller 甚至模型中获得相同的本地化 DisplayAttribute。

我尝试使用如下代码:

var name = TypeExample.A.GetType()?
            .GetMember(TypeExample.A.ToString())?
            .FirstOrDefault()?
            .GetCustomAttribute<DisplayAttribute>()?.GetName();

但它不返回本地化的显示名称。

我想在 ApiController 的模型中使用它,例如。

public class Model
{
    public TypeExample Type { get; set; }

    public string TypeDisplayValue => Type.GetDisplayValue()
}

最佳答案

我终于成功完成了这个任务。

我创建了一个枚举翻译服务,在启动时注册为临时服务

public class EnumTranslatorService:IEnumTranslatorService
{
    private IModelMetadataProvider _metadataProvider;

    public EnumTranslatorService(IModelMetadataProvider metadataProvider)
    {
        _metadataProvider = metadataProvider;
    }

    public string TranslateDisplayName<TEnum>(TEnum e) where TEnum : struct
    {
        var a = _metadataProvider.GetMetadataForType(e.GetType());
        var name = a.EnumGroupedDisplayNamesAndValues.FirstOrDefault(t => 
                       t.Value ==  a.EnumNamesAndValues[e.ToString()]).Key.Name;

        return name ?? e.ToString();
    }
}

它使用在 aspnetcore 中创建的 IModelMetadataProvider。注入(inject)后,我将其用作:

_enumTranslatorService.TranslateDisplayName(EnumExampleType.A)

关于c# - 使用 Asp.Net Core 获取 Controller 中的本地化显示属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247853/

相关文章:

c# - 使用.NET Core中的NEST对ElasticSearch中的嵌套集合执行查询

asp.net-core - .NET Core 运行时无需安装

sql-server - docker 中的 Asp.net core 未处理的异常。 SqlException (0x80131904) : . .,但是随后在登录前握手期间发生错误

angular - 当我刷新页面时,我只看到最后一个 JSON 文件而不是 View

image - Razor 页面 .Net 核心显示来自页面模型的 base64 图像

C# 将 Char 转换为 Byte(十六进制表示)

c# - C++ 数组 vs C# ptr 速度混淆

c# - 项目引用在 VisualStudio2010 中不起作用

c# - 打包的 Excel 加载项无法使用 Excel DNA c# 创建

c# - XmlDocument 保存使文件保持打开状态