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


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".

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.