Qual é a diferença entre @Html.Label()
, @Html.LabelFor()
e @Html.LabelForModel()
métodos?
asp.net-mvc
razor
Fabricio
fonte
fonte
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 cujofor
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>
fonte
@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 construtorHtml.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.fonte
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:
Referência para resposta no fórum asp.net
fonte
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
fonte