Quelle est la différence entre @Html.Label()
, @Html.LabelFor()
et les @Html.LabelForModel()
méthodes?
asp.net-mvc
razor
Fabricio
la source
la source
Réponses:
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.LabelForModel
est un peu plus compliqué. Elle renvoie une étiquette dont lafor
valeur 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>
la source
@Html.EditorFor(m => Test)
ou@Html.EditorFor(m => m.Test)
?Html.Label
- Crée simplement une balise d'étiquette avec ce que la chaîne passée dans le constructeur estHtml.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.la source
LabelForModel
ça sert - voyez ma réponse.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:
Référence à répondre sur le forum asp.net
la source
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
la source