我想在我的 ASP.NET MVC 应用程序中使用 DataAnnotations。我有强类型资源类,想在我的视图模型中定义:
[DisplayName(CTRes.UserName)]
string Username;
CTRes
是我的资源,自动生成的类。不允许使用上述定义。还有其他解决方案吗?
我想在我的 ASP.NET MVC 应用程序中使用 DataAnnotations。我有强类型资源类,想在我的视图模型中定义:
[DisplayName(CTRes.UserName)]
string Username;
CTRes
是我的资源,自动生成的类。不允许使用上述定义。还有其他解决方案吗?
.NET 4.0 中添加了DisplayAttribute,它允许您指定资源字符串:
[Display(Name = "UsernameField")]
string Username;
如果您还不能使用 .NET 4.0,您可以编写自己的属性:
public class DisplayAttribute : DisplayNameAttribute
{
public DisplayAttribute(Type resourceManagerProvider, string resourceKey)
: base(LookupResource(resourceManagerProvider, resourceKey))
{
}
private static string LookupResource(Type resourceManagerProvider, string resourceKey)
{
var properties = resourceManagerProvider.GetProperties(
BindingFlags.Static | BindingFlags.NonPublic);
foreach (var staticProperty in properties)
{
if (staticProperty.PropertyType == typeof(ResourceManager))
{
var resourceManager = (ResourceManager)staticProperty
.GetValue(null, null);
return resourceManager.GetString(resourceKey);
}
}
return resourceKey;
}
}
你可以这样使用:
[Display(typeof(Resources.Resource), "UsernameField"),
string Username { get; set; }
This now works as it should in MVC3, as mentioned on ScottGu's post, and would allow you to use the built in DisplayAttribute with a localized resource file.