Как изменить отображаемое имя LabelFor в razor в mvc3?


в бритвенном двигателе я использовал LabelFor вспомогательный метод для отображения имени

но отображаемое имя, кажется, не очень хорошо для отображения. поэтому мне нужно изменить мое отображаемое имя, как это сделать....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 
5 72

5 ответов:

вы можете украсить свой вид модели свойство с [DisplayName] атрибут и укажите текст, который будет использоваться:

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }

или используйте другую перегрузку помощника LabelFor, которая позволяет указать текст:

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

и, нет, вы не можете указать имя класса в MVC3, как вы пытались сделать, как LabelFor помощник не поддерживает это. Однако это будет работать в MVC4 или 5.

это был старый вопрос, но существующие ответы игнорируют серьезную проблему отбрасывания любых пользовательских атрибутов при регенерации модели. Я добавляю более подробный ответ, чтобы покрыть имеющиеся варианты.

у вас есть 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 собственность, вы могли бы сделать это так:

сначала объявите a частичная класс С тем же именем (и с использованием того же пространства имен), что позволяет добавлять атрибут класса без переопределения:

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

вы можете изменить текст надписей, украсив свойство с помощью .

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

или, вы можете написать исходный HTML явно:

<label for="SomekingStatus" class="control-label">Someking Status</label>

украсьте свойство модели атрибутом DisplayName.

@ Html.LabelFor (model = > модель.SomekingStatus, "foo bar")