¿Cuál es la diferencia entre @Html.Label(), @Html.LabelFor()y @Html.LabelForModel()métodos?
asp.net-mvc
razor
Fabricio
fuente
fuente

Respuestas:
Html.Labelle 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.LabelForle 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 cuyoforvalor 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>fuente
@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 constructorHtml.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 titleEn 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.fuente
LabelForModeles, 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:
Referencia para responder en el foro asp.net
fuente
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 typedEl 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
fuente