Jaka jest różnica między Html.Label, Html.LabelFor i Html.LabelForModel

86

Jaka jest różnica między @Html.Label(), @Html.LabelFor()a @Html.LabelForModel()metody?

Fabricio
źródło
wszystko w nazwie. Jeden jest przeznaczony dla ogólnych etykiet, drugi dla określonych etykiet właściwości modelu, a drugi dla ogólnych etykiet modelu.
Francisco Afonso
6
@FranciscoAfonso To jednak nie wyjaśnia, czym właściwie się zajmują.
Ant P

Odpowiedzi:

110

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.LabelForModeljest nieco trudniejsze. Zwraca etykietę, której forwartość 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>
Ant P
źródło
czy to jest @Html.EditorFor(m => Test)czy @Html.EditorFor(m => m.Test)?
Fabricio
12

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.

CorrugatedAir
źródło
To nie jest to, do czego LabelForModelsłuży - zobacz moją odpowiedź.
Ant P
6

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:

wprowadź opis obrazu tutaj

Odniesienie do odpowiedzi na forum asp.net

AlexMelw
źródło
4

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

Mahesh Chitroda
źródło
A co z Html.LabelForModel?
Fabricio
zwraca etykietę z ciągiem reprezentującym model, tak jak wszyscy robią to, co mówi ich nazwa ...
Francisco Afonso
przepraszam, nigdy nie widziałem i nie używałem @ html.LableForModel :)
Mahesh Chitroda
patrz poniżej link msdn.microsoft.com/en-in/library/…
Mahesh Chitroda