我有一个“通用”Razor视图,用于显示模型的表格,该模型是IEnumerable<IFirstLevetOverviewModel>
之类的集合。在这个视图中,我循环访问集合中的所有项目并通过反射显示列和标题。所以为了构建标题我正在使用这段代码:
模型属性:
[Display(Name = "Personalkategorie_OffiziellerStellenplan"]
public string PersonalNumber { get; set; }
查看:
@foreach (var prop in Model.FirstOrDefault().GetType().GetProperties())
{
if (!prop.PropertyType.Name.Contains("IEnumerable"))
{
<th style="width: calc(100%/@propsCount);">
@DisplayNameReflected(prop);
</th>
}
}
助手:
@helper DisplayNameReflected(PropertyInfo property)
{
if (!property.PropertyType.Name.Contains("IEnumerable"))
{
var dd = property.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute;
if (dd != null)
{
var name = dd.Name;
}
}
}
它工作正常。但是现在我需要实现本地化,所以我需要使用ResourceType
([Display(Name = "Personalkategorie_OffiziellerStellenplan", ResourceType = typeof(Labels))]
)。
但我无法弄清楚如何改进我的助手以获得本地化名称。有可能吗?或者也许有一些更清洁的方法来做它?
答案 0 :(得分:0)
可以通过ResourceManage完成:
@helper DisplayNameReflected(PropertyInfo property, ResourceManager resManager)
{
if (!property.PropertyType.Name.Contains("IEnumerable"))
{
var dd = property.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute;
if (dd != null)
{
<p>
@resManager.GetString(dd.Name, CultureInfo.CurrentCulture)
</p>
}
}
}