obtenir la valeur de l'attribut DisplayName
public class Class1
{
[DisplayName("Something To Name")]
public virtual string Name { get; set; }
}
Comment obtenir la valeur de l'attribut DisplayName en C# ?
Vous devez vous connecter pour publier un commentaire.
Essayer ces méthodes de l'utilitaire, de la mine:
D'utilisation serait:
Vous avez besoin pour obtenir le
PropertyInfo
associée à la propriété (par exemple, viatypeof(Class1).GetProperty("Name")
) et ensuite appelerGetCustomAttributes
.C'est peu pratique en raison de retourner plusieurs valeurs, vous voulez écrire un helper pour ce faire, si vous avez besoin de quelques endroits. (Il y a peut-être déjà une méthode d'assistance dans le cadre de quelque part, mais si il y est je suis pas au courant de cela.)
EDIT: Comme leppie observer, il n'y est une telle méthode:
Attribut.GetCustomAttribute(MemberInfo, Type)
Attribute.GetCustomAttribute(MemberInfo, Type)
🙂 msdn.microsoft.com/en-us/library/ms130863Tout d'abord, vous devez obtenir un
MemberInfo
objet qui le représente bien. Vous aurez besoin de faire un peu de réflexion:(Je suis en utilisant le "old-style" de la réflexion, mais vous pouvez également utiliser une expression de l'arbre si vous avez accès à la type au moment de la compilation)
Ensuite, vous pouvez récupérer l'attribut et obtenir la valeur de la
DisplayName
propriété:() les parenthèses sont nécessaires faute de frappe erreur
À partir de l'intérieur d'un point de vue qui a Class1 comme il est fortement typé modèle de vue:
Si quelqu'un est intéressé à obtenir la chaîne localisée de la propriété avec DisplayAttribute et ResourceType comme ceci:
L'utilisation de ce qui suit après
displayAttribute != null
(comme indiqué ci-dessus par @alex réponse):DisplayAttribute
aGetName
méthode. Pas besoin de votre code .NET 4+ : msdn.microsoft.com/en-us/library/...GetName()
méthode retourne la Clé, et non pas la Valeur spécifiée dans le fichier de ressources..GetName()
, plutôt que le code ci-dessus, voir le problème que j'avais avec le code ci-dessus ici : stackoverflow.com/questions/43827360/...De Nice les classes de Riches Tebb!
J'ai été en utilisant DisplayAttribute et le code ne fonctionne pas pour moi. La seule chose que j'ai ajouté est de la manipulation de DisplayAttribute. Brève recherche donné que cet attribut est nouveau pour MVC3 & .Net 4 et fait à peu près la même chose plus plus. Voici une version modifiée de la méthode:
J'ai ce générique utilité de la méthode. Je passe dans une liste d'un type donné (en Supposant que vous avez une prise en charge de classe) et il génère un datatable avec les propriétés que les en-têtes de colonne et les éléments de la liste de données.
Tout comme dans la norme MVC, si vous n'avez pas l'attribut DisplayName défini, il reviendra au nom de la propriété de sorte que vous n'avez qu'à inclure DisplayName où il est différent du nom de la propriété.
Si il y a de plus efficace /plus sûr moyen de le faire, j'avais appreicate tous les commentaires. Le commentaire //clause where filtre propriétés virtuelles. Utile si vous utilisez des classes de modèle directement que EF met dans "Navigation" propriétés virtuelles. Cependant, il sera également filtrer vos propres propriétés virtuelles si vous choisissez d'étendre de telles classes. Pour cette raison, je préfère faire un ViewModel et de la décorer avec seulement les propriétés et le nom d'affichage des attributs requis, puis faire une liste d'entre eux.
Espère que cette aide.
displayName
variable détient maintenant la valeur de la propriété.où
foo
est une instance deClass1
En supposant
property
commePropertyInfo
type, vous pouvez le faire en une seule ligne:Essayez ce code:
Il vous donnera la valeur de l'attribut de données
Name
.S'il vous plaît essayer de code ci-dessous, je pense que cela va résoudre votre problème.
Suivantes Riche Tebb et Matt Baker réponse, je voulais utiliser le
ReflectionExtensions
méthodes dans une requête LINQ, mais ça ne marchait pas, donc j'ai fait cette méthode pour que cela fonctionne.Si
DisplayNameAttribute
est de définir la méthode sera de retour, sinon il sera de retour leMemberInfo
nom.Méthode d'essai:
Méthode de Test de sortie:
La classe avec
DisplayName1
Attribut:Et la méthode d'extension:
}
GetPropertyInformation()
n'existe pas dans ce contexte. Je viens de réalisé que ce code est présent dans un répondre ci-dessous