Quelle est la différence entre Html.Label, Html.LabelFor et Html.LabelForModel

86

Quelle est la différence entre @Html.Label(), @Html.LabelFor()et les @Html.LabelForModel()méthodes?

Fabricio
la source
tout est dans le nom. L'un concerne les étiquettes générales, l'autre les étiquettes de propriétés de modèle spécifiques et l'autre les étiquettes générales de modèle.
Francisco Afonso
6
@FranciscoAfonso Cela n'explique pas vraiment ce qu'ils font réellement.
Ant P

Réponses:

110

Html.Label vous donne une étiquette pour une entrée dont le nom correspond au texte d'entrée spécifié (plus spécifiquement, pour la propriété de modèle correspondant à l'expression de chaîne):

// Model
public string Test { get; set; }

// View
@Html.Label("Test")

// Output
<label for="Test">Test</label>

Html.LabelFor vous donne une étiquette pour la propriété représentée par l'expression fournie (généralement une propriété de modèle):

// Model
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

// View
@model MyModel
@Html.LabelFor(m => m.Test)

// Output
<label for="Test">A property</label>

Html.LabelForModelest un peu plus compliqué. Elle renvoie une étiquette dont la forvaleur est celle du paramètre représenté par l'objet modèle. Ceci est particulièrement utile pour les modèles d'éditeur personnalisés. Par exemple:

// Model
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

// Main view
@Html.EditorFor(m => m.Test)

// Inside editor template
@Html.LabelForModel()

// Output
<label for="Test">A property</label>
Fourmi P
la source
est-ce @Html.EditorFor(m => Test)ou @Html.EditorFor(m => m.Test)?
Fabricio
12

Html.Label - Crée simplement une balise d'étiquette avec ce que la chaîne passée dans le constructeur est

Html.LabelFor- Crée une étiquette pour cette propriété spécifique. Ceci est fortement typé. Par défaut, cela ne fera que le nom de la propriété (dans l'exemple ci-dessous, cela affichera MyProperty si cet attribut d'affichage n'était pas là). Un autre avantage de ceci est que vous pouvez définir la propriété d'affichage dans votre modèle et c'est ce qui sera mis ici:

public class MyModel
{
    [Display(Name="My property title")
    public class MyProperty{get;set;}
}

À votre avis:

Html.LabelFor(x => x.MyProperty) //Outputs My property title

Dans ce qui précède, LabelFor s'affiche <label for="MyProperty">My property title</label>. Cela fonctionne bien afin que vous puissiez définir en un seul endroit ce que sera l'étiquette de cette propriété et l'afficher partout.

OnduléAir
la source
Ce n'est pas vraiment à quoi LabelForModelça sert - voyez ma réponse.
Ant P
6

Je pense que l'utilisation de @Html.LabelForModel()devrait être expliquée plus en détail.

La méthode LabelForModel renvoie un élément d'étiquette HTML et le nom de propriété de la propriété représentée par le modèle.

Vous pouvez vous référer au code suivant:

Code dans le modèle:

using System.ComponentModel;

[DisplayName("MyModel")]
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

Code en vue:

@Html.LabelForModel()
<div class="form-group">

    @Html.LabelFor(model => model.Test, new { @class = "control-label col-md-2" })

    <div class="col-md-10">
        @Html.EditorFor(model => model.Test)
        @Html.ValidationMessageFor(model => model.Test)
    </div>
</div>

La capture d'écran de sortie:

entrez la description de l'image ici

Référence à répondre sur le forum asp.net

AlexMelw
la source
4

supposons que vous ayez besoin d'une étiquette avec le texte customername que vous pouvez l'obtenir de 2 façons

[1]@Html.Label("CustomerName")

[2]@Html.LabelFor(a => a.CustomerName)  //strongly typed

La 2ème méthode a utilisé une propriété de votre modèle. Si votre vue implémente un modèle, vous pouvez utiliser la 2ème méthode.

Plus d'informations s'il vous plaît visitez le lien ci-dessous

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx

Mahesh Chitroda
la source
Qu'en est-il de Html.LabelForModel?
Fabricio
renvoie une étiquette avec une chaîne qui représente le modèle, comme ils font tous ce que leur nom dit ...
Francisco Afonso
désolé je n'ai jamais vu et utilisé @ html.LableForModel :)
Mahesh Chitroda
voir ci-dessous le lien msdn.microsoft.com/en-in/library/…
Mahesh Chitroda