web-dev-qa-db-fra.com

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

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

84
Fabricio

Html.Label vous donne une étiquette pour une entrée dont le nom correspond au texte d'entrée spécifié (plus précisément, 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.LabelForModel est un peu plus compliqué. Elle renvoie une étiquette dont la valeur for est celle du paramètre représenté par l'objet de modèle. Cela 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>
107
Ant P

Html.Label - Crée juste une étiquette avec quelle que soit la chaîne transmise au constructeur

Html.LabelFor - Crée une étiquette pour cette propriété spécifique. Ceci est fortement typé. Par défaut, ceci fera juste le nom de la propriété (dans l'exemple ci-dessous, il sortira MyProperty si cet attribut Display n'était pas là). Un autre avantage est que vous pouvez définir la propriété display 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;}
}

A votre avis:

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

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

12
CorrugatedAir

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 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:

enter image description here

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

6
AndreyWD

supposons que vous ayez besoin d’une étiquette avec un nom de texte personnalisé que vous puissiez y accéder de deux façons

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

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

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

Plus d'infos 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

3
Mahesh Chitroda