我已经通过添加Display
属性本地化了我的应用程序中属性名称的显示,该属性从resx
文件中获取字符串值:
public class ViewLeadViewModel
{
[Required]
[Display(Name = "Location", ResourceType = typeof(FormLabels))]
public string Location { get; set; }
}
这在表单和在基本网格中查看数据时都可以正常工作。
但是,我想使用WebGrid
来显示数据,但似乎不支持Display
属性,我们只能使用DisplayName
(目前列标题只使用属性的实际名称。)
我尝试添加此属性:
[DisplayName(FormLabels.ResourceManager.GetString("Location"))]
但是我收到了错误
属性参数必须是属性参数类型
的常量表达式,typeof表达式或数组创建表达式
如何从资源文件本地化WebGrid
中的列标题?
以下是Index.cshtml
中的代码:
@model IEnumerable<AuroraWeb.Models.ViewLeadViewModel>
@{
var grid = new WebGrid(new List<object>());
grid = new WebGrid( Model,
rowsPerPage: 100);
}
@grid.GetHtml(
tableStyle: "table",
alternatingRowStyle: "alternate")
答案 0 :(得分:1)
您可以创建从DisplayNameAttribute
继承的自定义属性类,并通过提供资源键在属性中设置DisplayName
字符串属性,如下例所示:
// provided by Brian Schroer
[AttributeUsage(AttributeTargets.Property)]
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
public LocalizedDisplayNameAttribute(string resourceKey)
{
ResourceKey = resourceKey;
}
private string ResourceKey { get; set; }
public override string DisplayName
{
get
{
string displayName = FormLabels.ResourceManager.GetString(ResourceKey);
return string.IsNullOrEmpty(displayName) ? string.Format("[[{0}]]", ResourceKey) : displayName;
}
}
}
使用示例:
[LocalizedDisplayName("Location")]
public string Location { get; set; }
参考:
ASP.NET MVC localization DisplayNameAttribute alternatives: a good way