Questa era una vecchia domanda, ma le risposte esistenti ignorano il grave problema di buttare via gli attributi personalizzati quando si rigenera il modello. Aggiungo una risposta più dettagliata per coprire le attuali opzioni disponibili.
Hai 3 possibilità:
- Aggiungi un
[DisplayName("Name goes here")]
attributo alla classe del modello di dati. Lo svantaggio è che questo viene gettato via ogni volta che si rigenerano i modelli di dati.
- Aggiungi un parametro stringa al tuo file
Html.LabelFor
. es. @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Riferimento: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Lo svantaggio di questo è che devi ripetere l'etichetta in ogni vista.
- Terza opzione. Utilizzare una classe di metadati allegata alla classe di dati (i dettagli seguono).
Opzione 3 - Aggiungi una classe di metadati:
Microsoft consente di decorare le proprietà su una classe Entity Framework, senza modificare la classe esistente ! Ciò avendo classi di metadati che si collegano alle classi del database (effettivamente un'estensione laterale della classe EF). Ciò consente di aggiungere attributi alla classe associata e non alla classe stessa in modo che le modifiche non vengano perse quando si rigenerano i modelli di dati .
Ad esempio, se la tua classe di dati è MyModel
con una SomekingStatus
proprietà, potresti farlo in questo modo:
Prima dichiara una classe parziale con lo stesso nome (e utilizzando lo stesso spazio dei nomi), che ti consente di aggiungere un attributo di classe senza essere sovrascritto:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Tutte le classi del modello di dati generate sono classi parziali, che ti consentono di aggiungere proprietà e metodi extra semplicemente creando più classi con lo stesso nome (questoèmolto utile e spesso lo uso ad esempio per fornire versioni di stringa formattata di altri tipi di campo nel modello ).
Passaggio 2: aggiungi una classe di metatadati a cui fa riferimento la tua nuova classe parziale:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Riferimento: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Appunti:
- Dalla memoria, se inizi a utilizzare una classe di metadati, potrebbe ignorare gli attributi esistenti sulla classe effettiva (
[required]
ecc.), Quindi potrebbe essere necessario duplicare quelli nella classe di metadati .
- Questo non funziona per magia e non funzionerà solo con le classi. Il codice che cerca gli attributi di decorazione dell'interfaccia utente è progettato per cercare prima una classe di metadati.