Jaka jest różnica między @Html.Label()
, @Html.LabelFor()
a @Html.LabelForModel()
metody?
Jaka jest różnica między @Html.Label()
, @Html.LabelFor()
a @Html.LabelForModel()
metody?
Odpowiedzi:
Html.Label
daje etykietę dla wejścia, którego nazwa pasuje do określonego tekstu wejściowego (a dokładniej, dla właściwości modelu pasującej do wyrażenia łańcuchowego):
// Model
public string Test { get; set; }
// View
@Html.Label("Test")
// Output
<label for="Test">Test</label>
Html.LabelFor
daje etykietę właściwości reprezentowanej przez podane wyrażenie (zwykle jest to właściwość modelu):
// 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
jest nieco trudniejsze. Zwraca etykietę, której for
wartość jest wartością parametru reprezentowanego przez obiekt modelu. Jest to przydatne w szczególności w przypadku niestandardowych szablonów edytorów. Na przykład:
// 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)
czy @Html.EditorFor(m => m.Test)
?
Html.Label
- Po prostu tworzy znacznik etykiety z łańcuchem przekazanym do konstruktora
Html.LabelFor
- Tworzy etykietę dla tej określonej właściwości. To jest mocno wpisane. Domyślnie spowoduje to po prostu nazwę właściwości (w poniższym przykładzie wyświetli MyProperty, jeśli tego atrybutu Display nie było). Inną korzyścią z tego jest to, że możesz ustawić właściwość wyświetlania w swoim modelu i to właśnie zostanie tutaj:
public class MyModel
{
[Display(Name="My property title")
public class MyProperty{get;set;}
}
Twoim zdaniem:
Html.LabelFor(x => x.MyProperty) //Outputs My property title
W powyższym oknie wyświetli się LabelFor <label for="MyProperty">My property title</label>
. Działa to ładnie, więc możesz zdefiniować w jednym miejscu, jaka będzie etykieta dla tej właściwości i wyświetlać ją wszędzie.
LabelForModel
służy - zobacz moją odpowiedź.
Myślę, że @Html.LabelForModel()
należy dokładniej wyjaśnić użycie .
Metoda LabelForModel zwraca element etykiety HTML i nazwę właściwości, która jest reprezentowana przez model.
Możesz odwołać się do następującego kodu:
Kod w modelu:
using System.ComponentModel;
[DisplayName("MyModel")]
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
Kod w widoku:
@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>
Zrzut ekranu wyjściowego:
załóżmy, że potrzebujesz etykiety z tekstową nazwą niestandardową, którą możesz uzyskać na dwa sposoby
[1]@Html.Label("CustomerName")
[2]@Html.LabelFor(a => a.CustomerName) //strongly typed
W drugiej metodzie wykorzystano właściwość z Twojego modelu. Jeśli Twój widok implementuje model, możesz użyć drugiej metody.
Więcej informacji można znaleźć pod poniższym linkiem
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx