¿Cuál es la diferencia entre @Html.Label()
, @Html.LabelFor()
y @Html.LabelForModel()
métodos?
¿Cuál es la diferencia entre @Html.Label()
, @Html.LabelFor()
y @Html.LabelForModel()
métodos?
Respuestas:
Html.Label
le da una etiqueta para una entrada cuyo nombre coincide con el texto de entrada especificado (más específicamente, para la propiedad del modelo que coincide con la expresión de cadena):
// Model
public string Test { get; set; }
// View
@Html.Label("Test")
// Output
<label for="Test">Test</label>
Html.LabelFor
le da una etiqueta para la propiedad representada por la expresión proporcionada (normalmente una propiedad 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
es un poco más complicado. Devuelve una etiqueta cuyo for
valor es el del parámetro representado por el objeto modelo. Esto es útil, en particular, para plantillas de editor personalizadas. Por ejemplo:
// 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)
o @Html.EditorFor(m => m.Test)
?
Html.Label
- Simplemente crea una etiqueta de etiqueta con lo que sea la cadena pasada al constructor
Html.LabelFor
: Crea una etiqueta para esa propiedad específica. Esto está fuertemente tipado. De forma predeterminada, esto solo hará el nombre de la propiedad (en el siguiente ejemplo, generará MyProperty si ese atributo Display no estaba allí). Otro beneficio de esto es que puede establecer la propiedad de visualización en su modelo y eso es lo que se pondrá aquí:
public class MyModel
{
[Display(Name="My property title")
public class MyProperty{get;set;}
}
En tu opinión:
Html.LabelFor(x => x.MyProperty) //Outputs My property title
En lo anterior, se mostrará LabelFor <label for="MyProperty">My property title</label>
. Esto funciona muy bien para que pueda definir en un solo lugar cuál será la etiqueta de esa propiedad y mostrarla en todas partes.
LabelForModel
es, mira mi respuesta.
Creo que el uso de @Html.LabelForModel()
debería explicarse con más detalle.
El método LabelForModel devuelve un elemento de etiqueta HTML y el nombre de propiedad de la propiedad que está representada por el modelo.
Puede consultar el siguiente código:
Código en modelo:
using System.ComponentModel;
[DisplayName("MyModel")]
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
Código a la 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>
La captura de pantalla de salida:
Suponga que necesita una etiqueta con el nombre de cliente de texto que puede lograr de 2 formas
[1]@Html.Label("CustomerName")
[2]@Html.LabelFor(a => a.CustomerName) //strongly typed
El segundo método utilizó una propiedad de su modelo. Si su vista implementa un modelo, puede usar el segundo método.
Más información, visite el siguiente enlace
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx