web-dev-qa-db-fra.com

Comment changer le nom d'affichage de LabelFor dans rasoir dans mvc3?

Dans un moteur de rasoir, j’ai utilisé la méthode auxiliaire LabelFor pour afficher le nom.

Mais le nom d'affichage ne semble pas être bon à afficher .. donc je dois changer mon nom d'affichage comment le faire ....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 
74
Sham

Vous pouvez décorer votre propriété de modèle de vue avec l'attribut [DisplayName] et spécifier le texte à utiliser:

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }

Ou utilisez une autre surcharge de l’assistant LabelFor qui vous permet de spécifier le texte:

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

Et, non, vous ne pouvez pas spécifier un nom de classe dans MVC3 comme vous avez essayé de le faire, car l'assistant LabelFor ne le prend pas en charge. Cependant, cela fonctionnerait dans MVC4 ou 5.

148
Darin Dimitrov

C'était une vieille question, mais les réponses existantes ignoraient le problème sérieux de jeter tous les attributs personnalisés lorsque vous régénériez le modèle. J'ajoute une réponse plus détaillée pour couvrir les options actuellement disponibles.

Vous avez 3 options:

  • Ajoutez un attribut [DisplayName("Name goes here")] à 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 de ceci est que vous doit répéter l’étiquette dans toutes les vues.
  • Troisième option. Utilisez une classe de méta-donné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 des propriétés sur une classe Entity Framework, sans modifier la classe existante! Ceci grâce à des classes de méta-données qui s'attachent à vos classes de base de données (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 lors de la régénération des modèles de données.

Par exemple, si votre classe de données est MyModel avec une propriété SomekingStatus, vous pouvez le faire comme suit:

Commencez par déclarer une classe partielle du même nom (et en utilisant le même espace de nom), ce qui vous permettra 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, ce qui vous permet d'ajouter des propriétés et des méthodes supplémentaires en créant simplement plus de classes du même nom (très pratique, 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
{
    // Apply DisplayNameAttribute (or any other attributes)
    [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:

  • En mémoire, si vous commencez à utiliser une classe de métadonnées, celle-ci peut ignorer les attributs existants de la classe actuelle ([required] etc.), de sorte que vous devrez peut-être dupliquer ceux de la classe Meta-data.
  • Cela ne fonctionne pas par magie et ne fonctionnera pas avec n'importe quelle classe. Le code qui recherche les attributs de décoration d'interface utilisateur est conçu pour rechercher d'abord une classe de métadonnées.
27
Gone Coding

Vous pouvez modifier le texte des étiquettes en ornant la propriété avec l'attribut DisplayName

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

Ou, vous pouvez écrire le code HTML brut explicitement:

<label for="SomekingStatus" class="control-label">Someking Status</label>
14
xandercoded

Décorez la propriété du modèle avec l'attribut DisplayName.

3
Teppic

@ Html.LabelFor (model => model.SomekingStatus, "barre de foo")

0
Anurag