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


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


76
2018-05-02 19:27


origen


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 (típicamente una propiedad del 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 cuya for valor es el del parámetro representado por el objeto modelo. Esto es útil, en particular, para las 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>

101
2018-05-02 20:09



Html.Label - Simplemente crea una etiqueta etiquetada con lo que sea que la cadena pasó al constructor es

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 ejemplo siguiente, mostrará MyProperty si ese atributo de visualización no estuviera allí). Otro beneficio de esto es que puede establecer la propiedad de visualización en su modelo y eso es lo que se colocará aquí:

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

En su opinión:

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

En lo anterior, LabelFor mostrará <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.


12
2018-05-02 20:06



Creo que el uso de @Html.LabelForModel() debe explicarse con más detalle.

El método LabelForModel devuelve un elemento de etiqueta HTML y el nombre de la propiedad que representa el modelo.

Puede consultar el siguiente código:

Código en el 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:

enter image description here

Referencia para responder en el foro asp.net


6
2018-04-21 20:57



supongamos que necesita una etiqueta con el nombre del cliente de texto que puede lograr utilizando 2 maneras

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

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

El segundo método usó una propiedad de su modelo. Si su vista implementa un modelo, puede usar el segundo método.

Más información, visite el enlace a continuación

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


3
2018-05-02 19:52