Как изменить отображаемое имя LabelFor в razor в mvc3?
в бритвенном двигателе я использовал LabelFor
вспомогательный метод для отображения имени
но отображаемое имя, кажется, не очень хорошо для отображения. поэтому мне нужно изменить мое отображаемое имя, как это сделать....
@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"})
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; }
Примечания:
- из памяти, если вы начинаете использовать класс метаданных, он может игнорировать существующие атрибуты на фактическом классе (
[required]
etc), поэтому вам может потребоваться дублировать их в классе метаданных.- это не работает по волшебству и воли не просто работать с любыми классами. Код, который ищет атрибуты оформления пользовательского интерфейса, предназначен для поиска класса метаданных в первую очередь.