asp.net-mvc-3 - tutorial - gestion des utilisateurs asp.net mvc




Comment changer le nom d'affichage pour LabelFor dans rasoir dans mvc3? (4)

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

Mais le nom d'affichage semble ne pas être bon à afficher. donc j'ai besoin de changer mon nom d'affichage comment le faire ....

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

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


C'était une vieille question, mais les réponses existantes ignorent la question sérieuse de jeter des attributs personnalisés quand vous régénérez le modèle. J'ajoute une réponse plus détaillée pour couvrir les options actuelles 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érer 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é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 les propriétés d'une classe Entity Framework, sans modifier la classe existante ! Ceci en ayant des classes de méta-données qui attachent à vos classes de base de données (en fait 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 une propriété SomekingStatus , vous pouvez le faire comme SomekingStatus :

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èles de données générées sont des classes partielles qui vous permettent d'ajouter des propriétés et méthodes supplémentaires en créant simplement plus de classes du même nom (ceci est très pratique et je l'utilise souvent pour fournir des versions de chaînes formatées d'autres types de champs dans le modèle ).

Étape 2: ajoutez une classe de métatadata 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:

  • 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 Meta-data.
  • Cela ne fonctionne pas par magie et ne fonctionnera pas avec n'importe quelles classes. Le code qui recherche les attributs de décoration de l'interface utilisateur est conçu pour rechercher une classe de métadonnées en premier.

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'aide 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'aide LabelFor ne le supporte pas. Cependant, cela fonctionnerait en MVC4 ou 5.


Vous pouvez modifier le texte des étiquettes en ajoutant la propriété à l'attribut DisplayName .

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

Ou, vous pourriez écrire le HTML brut explicitement:

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




html-helper