Antwort

0

Attribute können dies nicht tun

C# attribute text from resource file?

Resource.ResourceName sehen würde eine String-Eigenschaft sein, Attributparameter nur Konstanten sein können, Aufzählungen, typeofs

7

Es gibt die DisplayAttribute, die .NET 4.0 hinzugefügt wurde, die Sie eine Ressource-Zeichenfolge angeben können:

[Display(Name = "UsernameField")] 
string Username; 

Wenn Sie nicht .NET 4.0 verwenden können, aber Sie können Ihr eigenes Attribut schreiben:

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; 
    } 
} 

, die Sie wie folgt verwenden:

[Display(typeof(Resources.Resource), "UsernameField"), 
string Username { get; set; } 
+1

Das ist nicht zu verwenden, erlaubt * * stark ** typisierte Ressourcen. DisplayNameAttribute war ein schlechtes Beispiel, weil es die Verwendung von schwach typisierten nicht zulässt :) Meine Frage besteht nicht darin, dass DisplayName die Verwendung von Ressourcen nicht zulässt, da dies, wie Sie geantwortet haben, einfach gehandhabt werden kann. Meine Frage betrifft die Verwendung von ** stark typisierten ** und nicht nur mit diesem Attribut, sondern mit jedem Attribut in DataAnnotations. – LukLed

+0

Dies sollte die akzeptierte Antwort auf die Frage "Gibt es andere Lösungen?" Sein. Die aktuell akzeptierte Antwort lautet einfach "Nein, du kannst nicht" –

0

Dies funktioniert nun, wie es sollte in MVC3, wie unter ScottGu's post erwähnt, und ermöglicht Ihnen, das integrierte DisplayAttribute mit einer lokalisierten Ressourcendatei zu verwenden.

+0

:) Das ist nicht was ich brauche. Als ich diese Frage schrieb, bemerkte ich nicht, dass das DisplayName-Attribut keine Ressourcen benötigt. Was ich wirklich verwenden möchte, ist ** stark ** ('ResourceClass.ResourceName') typisierte Ressourcen mit allen Attributen. – LukLed