Это был старый вопрос, но существующие ответы игнорируют серьезную проблему отбрасывания любых настраиваемых атрибутов при повторном создании модели. Я добавляю более подробный ответ, чтобы охватить текущие доступные варианты.
У вас есть 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]
т. Д.), Поэтому вам может потребоваться дублировать их в классе метаданных.
- Это не работает по волшебству и не будет работать только с любыми классами. Код, который ищет атрибуты оформления пользовательского интерфейса, предназначен в первую очередь для поиска класса метаданных.