Asp.net mvc 4 将属性显示名称转换委托给处理程序

Asp.net mvc 4 将属性显示名称转换委托给处理程序,asp.net-mvc-4,data-annotations,Asp.net Mvc 4,Data Annotations,模型中的当前代码: [Display(Name = "E-mail")] public string EMail { get; set; } 所需代码: public string EMail { get; set; } 我想将翻译委托给处理程序,类似这样: 如果(propertyName==“电子邮件”)返回“电子邮件” 根据我对您问题的理解,我假设您正在尝试在应用程序中实现本地化 如果是,有两种选择 资源 在.NET中,您可以在应用程序中处理翻译(每种语言一个resx)。然后,您可以通过

模型中的当前代码:

[Display(Name = "E-mail")]
public string EMail { get; set; }
所需代码:

public string EMail { get; set; }
我想将翻译委托给处理程序,类似这样:

如果(propertyName==“电子邮件”)返回“电子邮件”


根据我对您问题的理解,我假设您正在尝试在应用程序中实现本地化

如果是,有两种选择

资源

在.NET中,您可以在应用程序中处理翻译(每种语言一个resx)。然后,您可以通过指定
Display
属性的
ResourceType
属性来指定资源。比如,

public class Model
{
  [Display(Name = "Email", ResourceType = typeof(Resources.Strings))]
  public string Email { get; set; }
}
自定义属性

或者,如果设置在处理程序中实现该属性,则可以实现自定义属性

编辑:根据上述文章中的示例进行修改

如果向项目中添加新的资源文件,请说出Strings.resx并将“HelloWorld”添加为字段。然后,您可以创建一个新属性,例如
LocalisedDisplayNameAttribute

public class LocalisedDisplayNameAttribute : DisplayNameAttribute
{
  public LocalisedDisplayNameAttribute(string resourceId)
    : base(GetMessageFromResource(resourceId))
  {
  }

  private static string GetMessageFromResource(string resourceId)
  {
    // "Strings" is the name of your resource file.
    ResourceManager resourceManager = Strings.ResourceManager;
    return resourceManager.GetString(resourceId);
  }
}
然后您可以按如下方式使用它

public class Model
{
  [LocalisedDisplayName("HelloWorld")]
  public string Email { get; set; }
}
如果我能进一步提供帮助,请告诉我


Matt

我不想写这行:[Display(Name=“Email”Resource Type=typeof(Resources.Strings))]只要这样:public string Email{get;set;}好的,你对另一个选项——自定义属性有什么想法?我不喜欢这样,我必须记住在所有字段中指定属性。令人惊讶的是,这件事做得再聪明不过了。但我可能不得不采取另一种选择。怎么做的?