Essa era uma pergunta antiga, mas as respostas existentes ignoram o sério problema de descartar quaisquer atributos personalizados ao regenerar o modelo. Estou adicionando uma resposta mais detalhada para cobrir as opções atuais disponíveis.
Você tem 3 opções:
- Adicione um
[DisplayName("Name goes here")]
atributo à classe do modelo de dados. A desvantagem é que isso é jogado fora sempre que você regenera os modelos de dados.
- Adicione um parâmetro de string ao seu
Html.LabelFor
. por exemplo, @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Referência: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx A desvantagem disso é que você deve repetir o rótulo em cada visão.
- Terceira opção. Use uma classe de metadados anexada à classe de dados (detalhes a seguir).
Opção 3 - Adicionar uma classe de metadados:
A Microsoft permite decorar propriedades em uma classe do Entity Framework, sem modificar a classe existente ! Isso por ter classes de metadados que se anexam às suas classes de banco de dados (efetivamente uma extensão lateral de sua classe EF). Isso permite que atributos sejam incluídos na classe associada e não na própria classe, de forma que as alterações não sejam perdidas quando você gerar novamente os modelos de dados .
Por exemplo, se sua classe de dados estiver MyModel
com uma SomekingStatus
propriedade, você poderia fazer assim:
Primeiro, declare uma classe parcial com o mesmo nome (e usando o mesmo namespace), o que permite adicionar um atributo de classe sem ser substituído:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Todas as classes de modelo de dados geradas são classes parciais, que permitem adicionar propriedades e métodos extras simplesmente criando mais classes com o mesmo nome (isso é muito útil e eu costumo usá-lo, por exemplo, para fornecer versões de string formatadas de outros tipos de campo no modelo )
Etapa 2: adicione uma classe de metatadados referenciada por sua nova classe parcial:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Referência: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Notas:
- Da memória, se você começar a usar uma classe de metadados, ela pode ignorar os atributos existentes na classe real (
[required]
etc.), portanto, pode ser necessário duplicá-los na classe Meta-dados.
- Isso não funciona por mágica e não funcionará apenas com qualquer classe. O código que procura os atributos de decoração da IU foi projetado para procurar primeiro uma classe de metadados.