¿Cuál es la diferencia entre Html.Label, Html.LabelFor y Html.LabelForModel?

86

¿Cuál es la diferencia entre @Html.Label(), @Html.LabelFor()y @Html.LabelForModel()métodos?

Fabricio
fuente
todo está en el nombre. Uno es para etiquetas generales, otro es para etiquetas de propiedades de modelos específicas y otro para etiquetas de modelos generales.
Francisco Afonso
6
@FranciscoAfonso Sin embargo, eso no explica realmente lo que hacen.
Ant P

Respuestas:

110

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.LabelForModeles un poco más complicado. Devuelve una etiqueta cuyo forvalor 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>
Hormiga p
fuente
es @Html.EditorFor(m => Test)o @Html.EditorFor(m => m.Test)?
Fabricio
12

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.

CorrugadoAire
fuente
Esto no es realmente para lo que LabelForModeles, mira mi respuesta.
Ant P
6

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:

ingrese la descripción de la imagen aquí

Referencia para responder en el foro asp.net

AlexMelw
fuente
4

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

Mahesh Chitroda
fuente
¿Qué pasa con Html.LabelForModel?
Fabricio
devuelve una etiqueta con una cadena que representa el modelo, como todos hacen lo que dice su nombre ...
Francisco Afonso
lo siento, nunca vi y usé @ html.LableForModel :)
Mahesh Chitroda
vea el enlace a continuación msdn.microsoft.com/en-in/library/…
Mahesh Chitroda