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; }
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
Dies sollte die akzeptierte Antwort auf die Frage "Gibt es andere Lösungen?" Sein. Die aktuell akzeptierte Antwort lautet einfach "Nein, du kannst nicht" –