Html.LabelFor указанный текст

83

Кто-нибудь знает, как указать текст при использовании Html.LabelFor(c=>c.MyField). Это просто MyFieldможет быть неподходящим названием для отображения на экране, вместо этого вы можете захотеть «Суперфантастическое поле», но, похоже, никаких перегрузок нет.

Есть идеи?

Кеззер
источник

Ответы:

139

Вы используете System.ComponentModel.DataAnnotations.DisplayAttribute:

[Display(Name = "My Field")]
public string MyField { get; set; }

Установка ResourceTypeсвойства для вашего атрибута позволит вам использовать файл ресурсов.

(До использования .NET 4 System.ComponentModel.DisplayNameAttributeс оговоркой, что отображаемое имя должно быть константой времени компиляции.)

Кертис Байс
источник
9
Ты победитель. Но ты должен это иметь using System.ComponentModel;.
Kezzer
У меня есть мой генератор кода, который автоматически выплевывает их, вставляя пробелы между словами, написанными на языке Паскаля. Работает как шарм!
GalacticCowboy
Хотя это решение выглядит неплохо, я понимаю Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type. Так что это решение кажется плохим для l18n.
Мартин Тома
@moose Я обновил ответ, чтобы отразить новую версию .NET-4, System.ComponentModel.DataAnnotations.DisplayAttributeкоторая позволяет использовать файл ресурсов. Если вы еще не пользуетесь версией 4 / 4.5, старую System.ComponentModel.DisplayNameAttributeможно расширить следующим образом: stackoverflow.com/a/2432520/33533
Curtis Buys
@CodeBlend Я использовал T4 для создания классов модели с соответствующими атрибутами. У меня был метод, который разбивал строку на заглавные буквы, а затем снова соединял пробелом. (Прошло 3 года, так что сейчас нет кода передо мной ...)
GalacticCowboy
51

Простое решение, просто добавьте в представление следующее:

@Html.LabelFor(c=>c.MyField, "My Field")
Фейсал Халид
источник
26

В MVC 3 есть новая перегрузка, поэтому вы можете указать собственный тест для метки для помощника.

Джо Картано
источник
8
@ Html.LabelFor (model => model.IdCode, «Дружественное имя»)
Дэйв Матир,
3

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

[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}
Даниэль
источник
Дисплей недоступен, и intellisense также не может найти его ни в одной библиотеке.
Kezzer
Добавьте ссылку на System.ComponentModel.DataAnnotations.dll и добавьте using System.ComponentModel.DataAnnotations.
Дэниел
Вместо этого добавьте ссылку на System.ComponentModel.DataAnnotations из GAC (то есть на вкладке .NET для добавления ссылок)
Даниэль,
Я уже использую DataAnnotations, поэтому проблема не в ссылке.
Кеззер
3
Ах, извините - очевидно, это Silverlight3 / .NET 4.0: msdn.microsoft.com/en-us/library/… Я думаю, DisplayName будет делать то, что вы хотите, как предлагает itsmecurtis. Подробнее об этом: davidhayden.com/blog/dave/archive/2009/08/19/…
Дэниел
2

Есть два способа:
1 "прямые аннотации"
2 "аннотации с ресурсом"
Прямые аннотации

[Display(Name = "My Field")]
public string MyField { get; set; }

Аннотатиносы с ресурсом

[Display(Name = "My_Field",ResourceType = typeof(Resource))]
public string MyField { get; set; }

Второй способ потребует добавления значения в файл ресурсов, вероятно, с именем Resource.resx .
Используйте то, что соответствует вашим целям.

Баймырза Шамыр
источник
0

Я еще не проверял CP1, но я прочитал его релиз Скотта и, кажется, припоминаю, что код был сгенерирован T4. Я полагаю, вы всегда можете изменить это, но я подозреваю, что они обеспечат перегрузки в CP2.

Изменить: источник всегда доступен, и поэтому вы можете просто изменить метод, изменить генератор T4, и все будет хорошо. Также вставьте тикет или запрос (каким-то образом) для этого мода, чтобы он работал в следующей версии.

Шанс
источник
Жаль, я делаю предварительный просмотр работы, но это не совсем жизнеспособно, поскольку наши имена полей довольно ложны по сравнению с их аналогами в описании.
Kezzer
0

Есть 5 перегрузок. Некоторые предлагают второй параметр "string labelText", который вы бы установили на "The Super Fantastic Field".

yogibeare
источник