将属性显示名称转换委派给处理程序

时间:2013-10-18 12:56:52

标签: asp.net-mvc-4 data-annotations

模型中的当前代码:

[Display(Name = "E-mail")]
public string EMail { get; set; }

所需代码:

public string EMail { get; set; }

我想将翻译委托给处理程序,如下所示:

  

if(propertyName ==" EMail")返回"电子邮件"

1 个答案:

答案 0 :(得分:0)

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

如果是这样,有两种选择;

<强>资源

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

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

自定义属性

或者,如果您已设置在处理程序中实现此功能,那么您可以实现自定义属性as demonstrated in this question

编辑:修改自上述帖子中的示例。

如果您向项目添加新的资源文件 - 比如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; }
}

如果我能进一步提供帮助,请告诉我,

马特