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

У мене є генератор коду, який автоматично випльовує їх, вставляючи пробіли між словами, написаними Pascal. Працює як шарм!
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
Кертіс купує

@CodeBlend Я використовував T4 для генерації класів моделі з відповідними атрибутами. У мене був метод, який розділив рядок на великі літери, а потім знову об’єднав пробілом. (Минуло 3 роки, тому не майте переді мною коду на даний момент ...)
GalacticCowboy


26

У MVC 3 є нова перевантаження, тому ви зможете визначити власний тест для помічника для помічника.


8
@ Html.LabelFor (model => model.IdCode, "Дружнє ім'я")
Dave Mateer

3

Я ще не завантажував v2, тому не можу протестувати, але я вважаю, що це працює як DynamicData, і в цьому випадку ви зробите щось подібне для своєї моделі:

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

Дисплей недоступний, і intellisense також не може знайти його в жодній бібліотеці.
Kezzer

Додайте посилання на System.ComponentModel.DataAnnotations.dll і додайте за допомогою System.ComponentModel.DataAnnotations.
Даніель

Швидше, додайте посилання на System.ComponentModel.DataAnnotations з GAC (тобто на вкладці .NET для додавання посилань)
Даніель

Я вже використовую DataAnnotations, тому посилання не є проблемою.
Kezzer

3
Ах, вибачте - це, мабуть, Silverlight3 / .NET 4.0: msdn.microsoft.com/en-us/library/... Я думаю, що DisplayName зробить те, що ти хочеш, як це пропонує йогоmecurtis. Ось більше про це: 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", який ви встановите на "Супер фантастичне поле".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.