C'était une vieille question, mais les réponses existantes ignorent le sérieux problème de la suppression des attributs personnalisés lorsque vous régénérez le modèle. J'ajoute une réponse plus détaillée pour couvrir les options actuellement disponibles.
Vous avez 3 options:
- Ajoutez un
[DisplayName("Name goes here")]
attribut à la classe de modèle de données. L'inconvénient est que cela est jeté chaque fois que vous régénérez les modèles de données.
- Ajoutez un paramètre de chaîne à votre
Html.LabelFor
. Par exemple, @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Référence: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx L'inconvénient est que vous devez répéter l'étiquette dans chaque vue.
- Troisième option. Utilisez une classe de métadonnées attachée à la classe de données (les détails suivent).
Option 3 - Ajouter une classe de métadonnées:
Microsoft permet de décorer les propriétés sur une classe Entity Framework, sans modifier la classe existante ! Ceci en ayant des classes de méta-données qui s'attachent à vos classes de base de données (effectivement une extension latérale de votre classe EF). Cela permet d'ajouter des attributs à la classe associée et non à la classe elle-même afin que les modifications ne soient pas perdues lorsque vous régénérez les modèles de données .
Par exemple, si votre classe de données est MyModel
avec unSomekingStatus
propriété, vous pouvez le faire comme ceci:
Déclarez d'abord une classe partielle du même nom (et en utilisant le même espace de noms), ce qui vous permet d'ajouter un attribut de classe sans être surchargé:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Toutes les classes de modèle de données générées sont des classes partielles, qui vous permettent d'ajouter des propriétés et des méthodes supplémentaires en créant simplement plus de classes du même nom (c'est très pratique et je l'utilise souvent, par exemple pour fournir des versions de chaîne formatées d'autres types de champs dans le modèle ).
Étape 2: ajoutez une classe de métatadonnées référencée par votre nouvelle classe partielle:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Référence: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Remarques:
- De mémoire, si vous commencez à utiliser une classe de métadonnées, elle peut ignorer les attributs existants sur la classe réelle (
[required]
etc.), vous devrez donc peut-être dupliquer ceux de la classe de métadonnées.
- Cela ne fonctionne pas par magie et ne fonctionnera pas seulement avec toutes les classes. Le code qui recherche les attributs de décoration de l'interface utilisateur est conçu pour rechercher d'abord une classe de métadonnées.