Quelle est la différence entre les méthodes @Html.Label()
, @Html.LabelFor()
et @Html.LabelForModel()
?
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>
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.
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:
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