Was ist der Unterschied zwischen @Html.Label()
, @Html.LabelFor()
und @Html.LabelForModel()
Methoden?
Was ist der Unterschied zwischen @Html.Label()
, @Html.LabelFor()
und @Html.LabelForModel()
Methoden?
Antworten:
Html.Label
gibt Ihnen eine Bezeichnung für eine Eingabe, deren Name mit dem angegebenen Eingabetext übereinstimmt (insbesondere für die Modelleigenschaft, die dem Zeichenfolgenausdruck entspricht):
// Model
public string Test { get; set; }
// View
@Html.Label("Test")
// Output
<label for="Test">Test</label>
Html.LabelFor
gibt Ihnen eine Bezeichnung für die Eigenschaft, die durch den angegebenen Ausdruck dargestellt wird (normalerweise eine Modelleigenschaft):
// 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
ist etwas kniffliger. Es gibt eine Bezeichnung zurück, deren for
Wert der des vom Modellobjekt dargestellten Parameters ist. Dies ist insbesondere für benutzerdefinierte Editorvorlagen nützlich. Beispielsweise:
// 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.EditorFor(m => Test)
oder @Html.EditorFor(m => m.Test)
?
Html.Label
- Erstellt einfach ein Label-Tag mit der Zeichenfolge, die an den Konstruktor übergeben wird
Html.LabelFor
- Erstellt eine Beschriftung für diese bestimmte Eigenschaft. Dies ist stark typisiert. Standardmäßig wird nur der Name der Eigenschaft angegeben (im folgenden Beispiel wird MyProperty ausgegeben, wenn das Display-Attribut nicht vorhanden ist). Ein weiterer Vorteil davon ist, dass Sie die Anzeigeeigenschaft in Ihrem Modell festlegen können. Dies wird hier angegeben:
public class MyModel
{
[Display(Name="My property title")
public class MyProperty{get;set;}
}
Aus Ihrer Sicht:
Html.LabelFor(x => x.MyProperty) //Outputs My property title
Oben wird LabelFor angezeigt <label for="MyProperty">My property title</label>
. Dies funktioniert gut, sodass Sie an einer Stelle definieren können, wie die Bezeichnung für diese Eigenschaft lauten soll, und sie überall anzeigen lassen können.
LabelForModel
- siehe meine Antwort.
Ich denke, dass die Verwendung von @Html.LabelForModel()
genauer erklärt werden sollte.
Die LabelForModel-Methode gibt ein HTML-Beschriftungselement und den Eigenschaftsnamen der Eigenschaft zurück, die vom Modell dargestellt wird.
Sie können auf den folgenden Code verweisen:
Code im Modell:
using System.ComponentModel;
[DisplayName("MyModel")]
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
Code im Blick:
@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>
Der Ausgabe-Screenshot:
Angenommen, Sie benötigen eine Beschriftung mit einem benutzerdefinierten Textnamen, die Sie auf zwei Arten erreichen können
[1]@Html.Label("CustomerName")
[2]@Html.LabelFor(a => a.CustomerName) //strongly typed
Die zweite Methode verwendete eine Eigenschaft aus Ihrem Modell. Wenn Ihre Ansicht ein Modell implementiert, können Sie die 2. Methode verwenden.
Weitere Infos finden Sie unter Link
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx