Qual é a diferença entre Html.Label, Html.LabelFor e Html.LabelForModel

86

Qual é a diferença entre @Html.Label(), @Html.LabelFor()e @Html.LabelForModel()métodos?

Fabricio
fonte
está tudo em nome. Um é para rótulos gerais, um é para rótulos de propriedades de modelos específicos e um para rótulos de modelos gerais.
Francisco Afonso
6
@FranciscoAfonso Mas isso não explica realmente o que eles fazem.
Formiga P

Respostas:

110

Html.Label fornece um rótulo para uma entrada cujo nome corresponde ao texto de entrada especificado (mais especificamente, para a propriedade do modelo que corresponde à expressão de string):

// Model
public string Test { get; set; }

// View
@Html.Label("Test")

// Output
<label for="Test">Test</label>

Html.LabelFor fornece um rótulo para a propriedade representada pela expressão fornecida (normalmente uma propriedade de modelo):

// 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é um pouco mais complicado. Ele retorna um rótulo cujo forvalor é o do parâmetro representado pelo objeto de modelo. Isso é útil, em particular, para modelos de editor personalizados. Por exemplo:

// 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>
Formiga P
fonte
é @Html.EditorFor(m => Test)ou @Html.EditorFor(m => m.Test)?
Fabricio
12

Html.Label - Apenas cria uma etiqueta de rótulo com qualquer string passada para o construtor

Html.LabelFor- Cria um rótulo para essa propriedade específica. Isso é fortemente tipado. Por padrão, isso fará apenas o nome da propriedade (no exemplo a seguir, ele produzirá MyProperty se o atributo Display não estiver lá). Outro benefício disso é que você pode definir a propriedade de exibição em seu modelo e é isso que será colocado aqui:

public class MyModel
{
    [Display(Name="My property title")
    public class MyProperty{get;set;}
}

Em sua opinião:

Html.LabelFor(x => x.MyProperty) //Outputs My property title

Acima, LabelFor será exibido <label for="MyProperty">My property title</label>. Isso funciona bem para que você possa definir em um lugar qual será o rótulo dessa propriedade e exibi-lo em todos os lugares.

CorrugatedAir
fonte
Não é realmente LabelForModelpara isso - veja minha resposta.
Formiga P
6

Acho que o uso de @Html.LabelForModel()deve ser explicado com mais detalhes.

O método LabelForModel retorna um elemento de rótulo HTML e o nome da propriedade que é representada pelo modelo.

Você pode se referir ao seguinte código:

Código no modelo:

using System.ComponentModel;

[DisplayName("MyModel")]
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

Código em vista:

@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>

A captura de tela de saída:

insira a descrição da imagem aqui

Referência para resposta no fórum asp.net

AlexMelw
fonte
4

suponha que você precise de um rótulo com um nome de usuário personalizado de texto, então você pode obtê-lo de 2 maneiras

[1]@Html.Label("CustomerName")

[2]@Html.LabelFor(a => a.CustomerName)  //strongly typed

O segundo método usa uma propriedade do seu modelo. Se sua visualização implementa um modelo, você pode usar o segundo método.

Mais informações, visite o link abaixo

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx

Mahesh Chitroda
fonte
E quanto ao Html.LabelForModel?
Fabricio
devolve uma etiqueta com um string que representa o modelo, como se todos fizessem o que o seu nome diz ...
Francisco Afonso
desculpe, eu nunca vi e usei @ html.LableForModel :)
Mahesh Chitroda
veja o link abaixo msdn.microsoft.com/en-in/library/…
Mahesh Chitroda