Esta era una pregunta antigua, pero las respuestas existentes ignoran el grave problema de desechar cualquier atributo personalizado cuando regenera el modelo. Estoy agregando una respuesta más detallada para cubrir las opciones disponibles actualmente.
Tienes 3 opciones:
- Agregue un
[DisplayName("Name goes here")]
atributo a la clase del modelo de datos. La desventaja es que esto se desecha cada vez que regenera los modelos de datos.
- Agregue un parámetro de cadena a su
Html.LabelFor
. por ejemplo, @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. Utilice una clase de metadatos adjunta a la clase de datos (se detallan 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 las clases de su base de datos (efectivamente, 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í para que los cambios no se pierdan cuando se regeneran los modelos de datos .
Por ejemplo, si su clase de datos está MyModel
con una SomekingStatus
propiedad, podría hacerlo así:
Primero declare una clase parcial del mismo nombre (y usando el mismo espacio de nombres), lo que le permite agregar un atributo de clase sin ser anulado:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Todas las clases de modelo de datos generadas son clases parciales, que le permiten agregar propiedades y métodos adicionales simplemente creando más clases con el mismo nombre (esto es muy útil y a menudo lo uso, por ejemplo, para proporcionar versiones de cadenas formateadas de otros tipos de campos en el modelo ).
Paso 2: agregue una clase de metadatos a la que haga referencia su nueva clase parcial:
public class MyModelMetaData
{
[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 es posible que deba duplicarlos en la clase de 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.