Це було старе запитання, але існуючі відповіді ігнорують серйозну проблему викидання будь-яких спеціальних атрибутів під час регенерації моделі. Я додаю більш детальну відповідь, щоб висвітлити поточні доступні варіанти.
У вас є 3 варіанти:
- Додайте
[DisplayName("Name goes here")]
атрибут до класу моделі даних. Недоліком є те, що це викидається щоразу, коли ви регенеруєте моделі даних.
- Додайте параметр рядка до вашого
Html.LabelFor
. наприклад, @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
посилання: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Недоліком цього є те, що ви повинні повторити мітку в кожному погляді.
- Третій варіант. Використовуйте клас метаданих, приєднаний до класу даних (подробиці далі).
Варіант 3 - Додайте клас метаданих:
Microsoft дозволяє прикрашати властивості класу Entity Framework, не змінюючи існуючий клас ! Це завдяки наявності класів метаданих, які приєднуються до класів бази даних (фактично розширення вашого класу EF збоку). Це дозволяє додавати атрибути до асоційованого класу, а не до самого класу, тому зміни не втрачаються при регенерації моделей даних .
Наприклад, якщо ваш клас даних MyModel
з SomekingStatus
власністю, ви могли б зробити це в такий спосіб :
Спочатку оголосіть частковий клас з тим самим іменем (і використовуючи той самий простір імен), що дозволяє додавати атрибут класу без перевизначення:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Усі класи згенерованих моделей даних є частковими класами, що дозволяють додавати додаткові властивості та методи, просто створюючи більше класів з однаковим ім'ям (це дуже зручно, і я часто використовую його, наприклад, для надання відформатованих рядкових версій інших типів полів у моделі ).
Крок 2: Додайте клас метаданих, на який посилається ваш новий частковий клас:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Посилання: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Примітки:
- З пам'яті, якщо ви починаєте використовувати клас метаданих, він може ігнорувати існуючі атрибути фактичного класу (
[required]
і т.д.), тому вам може знадобитися продублювати їх у класі мета-даних.
- Це не діє за допомогою магії і не буде працювати лише з будь-якими класами. Код, який шукає атрибути оформлення інтерфейсу, призначений для пошуку класу метаданих спочатку.