Как изменить отображаемое имя для LabelFor в бритве в mvc3?
В двигателе бритвы я использовал вспомогательный метод LabelFor
для отображения имени
Но отображаемое имя, похоже, не очень хорошо отображает.
поэтому мне нужно изменить свое отображаемое имя, как это сделать....
@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"})
Ответы
Ответ 1
Вы можете украсить свое свойство модели просмотра атрибутом [DisplayName]
и указать текст, который будет использоваться:
[DisplayName("foo bar")]
public string SomekingStatus { get; set; }
Или используйте другую перегрузку помощника LabelFor, который позволяет вам указать текст:
@Html.LabelFor(model => model.SomekingStatus, "foo bar")
И нет, вы не можете указать имя класса в MVC3, как вы пытались сделать, поскольку помощник LabelFor
не поддерживает это. Однако это будет работать в MVC4 или 5.
Ответ 2
Это был старый вопрос, но существующие ответы игнорируют серьезную проблему сбрасывания любых пользовательских атрибутов при регенерации модели. Я добавляю более подробный ответ, чтобы освещать имеющиеся доступные варианты.
У вас есть 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: добавьте класс metatadata, на который ссылается ваш новый частичный класс:
public class MyModelMetaData
{
// Apply DisplayNameAttribute (or any other attributes)
[DisplayName("My New Label")]
public string SomekingStatus;
}
Ссылка: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Примечания:
- Из памяти, если вы начнете использовать класс метаданных, он может игнорировать существующие атрибуты для фактического класса (
[required]
и т.д.), поэтому вам может понадобиться дублировать их в классе метаданных.
- Это не работает по волшебству и не будет работать только с любыми классами. Код, который ищет атрибуты оформления пользовательского интерфейса, предназначен для поиска класса метаданных в первую очередь.
Ответ 3
Вы можете изменить текст меток, украсив свойство атрибутом DisplayName
.
[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }
Или вы можете явно написать необработанный HTML:
<label for="SomekingStatus" class="control-label">Someking Status</label>
Ответ 4
Украсить свойство модели атрибутом DisplayName.
Ответ 5
@Html.LabelFor(model = > model.SomekingStatus, "foo bar" )