我有一个使用DisplayAttribute,资源文件和内置于本地化支持的aspnetcore本地化的枚举类型。我可以通过例如使用
来成功验证本地化在视图中是否有效Html.GetEnumSelectList<TypeExample>().
如何在控制器甚至模型中获得相同的本地化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()
}
答案 0 :(得分:0)
最后我成功完成了这个任务。
我创建了一个枚举转换器服务,该服务在启动时注册为临时服务
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。注入后,我将其用作:
_enumTranslatorService.TranslateDisplayName(EnumExampleType.A)