Qual é a diferença entre @Html.Label()
, @Html.LabelFor()
e @Html.LabelForModel()
métodos?
Qual é a diferença entre @Html.Label()
, @Html.LabelFor()
e @Html.LabelForModel()
métodos?
Respostas:
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 for
valor é 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>
@Html.EditorFor(m => Test)
ou @Html.EditorFor(m => m.Test)
?
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.
LabelForModel
para isso - veja minha resposta.
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:
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