如何在ASP.NET MVC2中使用和/或本地化DisplayAttribute?

asp*_*net 3 asp.net data-annotations asp.net-mvc-2

可能重复:
来自Resources的DisplayName属性?

我试图弄清楚如何在我的MVC 2 ViewModel中使用DisplayAttribute来使用Html.LabelFor()帮助器.

也不

public class TestModel
{
    [Display(ResourceType = typeof(Localization.Labels))]
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

也不

public class TestModel
{
    [Display(Name = "test")]
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

似乎工作.本地化必需属性按预期工作:

[Required(ErrorMessageResourceName = "Test", ErrorMessageResourceType = typeof(Localization.Labels))]
Run Code Online (Sandbox Code Playgroud)

我正在使用VS2010 RC.有人跑了吗?

Lev*_*evi 12

[Display]属性是特定于.NET 4的属性.由于MVC 2是针对.NET 3.5编译的,因此运行时无法识别此属性.

有关更多信息和解决方法,请参阅http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=5515.

编辑:

呃,工作项目不是那么大.也可以包括内联.:)

[Display]属性是DataAnnotations v4中的新属性,因此MVC 2无法使用它,因为我们是针对DataAnnotations v3.5编译的.使用[DisplayName]直到MVC 3,我们将根据DataAnnotations v4编译.

你有一些解决方法.当.NET 4 RTM时,我们将提供特定于.NET 4的Futures二进制文件,Futures二进制文件将具有一个能够理解[Display]和其他DataAnnotations v4特定属性的元数据提供程序.或者,如果您需要立即使用解决方案,请为[DisplayName]属性创建子类,创建一个适当实例化的私有DisplayNameAttribute字段,并覆盖虚拟DisplayNameAttribute.DisplayName属性,以便委托给_theWrappedDisplayNameAttribute.GetName().

public class MultiCulturalDisplayName : DisplayNameAttribute {
  private DisplayAttribute display;

  public MultiCulturalDisplayName(Type resourceType, string resourceName) {
    this.display = new DisplayAttribute { ResourceType = resourceType, Name = resourceName };
  }

  public override string DisplayName {
    get { return display.GetName(); }
  }
}
Run Code Online (Sandbox Code Playgroud)