template net mvc layouts cshtml asp _layout asp.net-mvc-3 html-helper

asp.net-mvc-3 - net - mvc layout menu



¿Cómo cambiar el nombre para mostrar de LabelFor en navaja en mvc3? (5)

@ Html.LabelFor (model => model.SomekingStatus, "foo bar")

En el motor de afeitar, LabelFor método LabelFor para mostrar el nombre

Pero el nombre de visualización parece no ser bueno para mostrar. entonces necesito cambiar mi nombre para mostrar cómo hacerlo ...

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"})


Decore la propiedad del modelo con el atributo DisplayName.


Esta era una pregunta antigua, pero las respuestas existentes ignoran el serio problema de descartar cualquier atributo personalizado cuando regeneras el modelo. Estoy agregando una respuesta más detallada para cubrir las opciones actuales disponibles.

Tienes 3 opciones:

  • Agregue un atributo [DisplayName("Name goes here")] a la clase de modelo de datos. La desventaja es que esto se descarta cada vez que regeneras los modelos de datos.
  • Agregue un parámetro de cadena a su Html.LabelFor . eg @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"}) Referencia: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx La desventaja de esto es que debe repetir la etiqueta en cada vista.
  • Tercera opción. Use una clase de metadatos adjunta a la clase de datos (detalles a continuación).

Opción 3 - Agregar una clase de metadatos:

¡Microsoft permite decorar propiedades en una clase de Entity Framework sin modificar la clase existente ! Esto al tener clases de metadatos que se adjuntan a sus clases de base de datos (de hecho una extensión lateral de su clase EF). Esto permite que los atributos se agreguen a la clase asociada y no a la clase en sí, por lo que los cambios no se pierden cuando regeneras los modelos de datos .

Por ejemplo, si su clase de datos es MyModel con una propiedad SomekingStatus , podría hacerlo así:

Primero declare una clase parcial del mismo nombre (y usando el mismo espacio de nombres), que le permite agregar un atributo de clase sin ser anulado:

[MetadataType(typeof(MyModelMetaData))] public partial class MyModel { }

Todas las clases de modelos de datos generados son clases parciales, que le permiten agregar propiedades y métodos adicionales simplemente creando más clases del mismo nombre (esto es muy útil y lo uso a menudo para proporcionar versiones de cadenas formateadas de otros tipos de campos en el modelo )

Paso 2: agrega una clase de metadatos a la que hace referencia tu nueva clase parcial:

public class MyModelMetaData { // Apply DisplayNameAttribute (or any other attributes) [DisplayName("My New Label")] public string SomekingStatus; }

Referencia: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx

Notas:

  • Desde la memoria, si comienza a usar una clase de metadatos, puede ignorar los atributos existentes en la clase real ( [required] etc.), por lo que puede necesitar duplicarlos en la clase Metadatos.
  • Esto no funciona por arte de magia y no solo funcionará con ninguna clase. El código que busca los atributos de decoración de la interfaz de usuario está diseñado para buscar primero una clase de metadatos.

Puede cambiar el texto de las etiquetas adornando la propiedad con el atributo DisplayName .

[DisplayName("Someking Status")] public string SomekingStatus { get; set; }

O bien, podría escribir el HTML sin procesar de forma explícita:

<label for="SomekingStatus" class="control-label">Someking Status</label>


Puede decorar su propiedad de modelo de vista con el atributo [DisplayName] y especificar el texto que se utilizará:

[DisplayName("foo bar")] public string SomekingStatus { get; set; }

O use otra sobrecarga de LabelFor helper que le permite especificar el texto:

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

Y, no, no puede especificar un nombre de clase en MVC3 como lo intentó hacer, ya que LabelFor helper no es compatible. Sin embargo, esto funcionaría en MVC4 o 5.