Как изменить отображаемое имя для 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" )