Jaka jest różnica między @Html.Label()
, @Html.LabelFor()
a @Html.LabelForModel()
metody?
asp.net-mvc
razor
Fabricio
źródło
źródło
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órejfor
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>
źródło
@Html.EditorFor(m => Test)
czy@Html.EditorFor(m => m.Test)
?Html.Label
- Po prostu tworzy znacznik etykiety z łańcuchem przekazanym do konstruktoraHtml.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.źródło
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:
Odniesienie do odpowiedzi na forum asp.net
źródło
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
źródło