MVC3 Показать шаблоны - PullRequest
       5

MVC3 Показать шаблоны

7 голосов
/ 07 декабря 2011

Я создал пользовательские шаблоны редактора и шаблоны отображения. Я поместил каждый из этих типов в папку в моей папке представлений. Папки назывались EditorTemplate или DisplayTemplate, в зависимости от того, какой тип шаблона был создан.

Итак, теперь я могу использовать EditorFor для использования моего пользовательского шаблона редактора или DisplayFor для моего пользовательского шаблона редактора.

Я хотел бы создать собственный шаблон для LabelFor, но я не нашел пример этого. Могу ли я создать папку с именем Labeltemplate в своей папке Views и добавить ее сюда?

UPDATE

Причина, по которой я пытался расширить LabelFor, заключалась в обработке свойства типа KeyValuePair. Я хочу использовать ключ этого свойства в качестве метки, а значение в качестве отображения. Я задал вопрос здесь о DisplayFor для обработки значения.

Мое решение закончилось как>

   @Html.DisplayFor(m => m.MyProperty, @Model.MyProperty.Key)

Спасибо

Ответы [ 3 ]

6 голосов
/ 07 декабря 2011

LabelFor не использует шаблоны. Он жестко закодирован в исходном коде MVC и выдает <label> независимо от того, что вы делаете.

Вам нужно написать собственный помощник html, если вы хотите изменить это поведение.

С другой стороны, если вы хотите использовать шаблоны, вы должны использовать помощники EditorFor / DisplayFor. Таким образом, поскольку метка предназначена для отображения, вы можете использовать шаблон отображения и вместо Html.LabelFor(x => x.Foo) использовать Html.DisplayFor(x => x.Foo). Что касается пользовательского шаблона, то вы либо украшаете свойство Foo с атрибутом [UIHint], либо передаете его в качестве второго аргумента помощнику DisplayFor.


UPDATE:

Согласно вашему комментарию вы не пытаетесь изменить разметку, а только значение. Вот для чего можно использовать второй аргумент помощника LabelFor:

@Html.LabelFor(x => x.Foo, Model.Key)
@Html.EditorFor(x => x.Foo)

При этом создается метка, связанная с вводом Foo (атрибут for метки назначен правильно), но показан текст, соответствующий свойству Key в модели представления.

2 голосов
/ 07 декабря 2011

Отсутствует поддержка создания шаблона для определенного метода HTML Helper (LabelFor).

Вы можете:

Разметить модель, используя мета-дескрипторы, чтобы изменить значение, отображаемое как частьметки:

 [DisplayName("Custom Label")]
 public string Test {get;set;}

Вы можете создать свой собственный метод HTML Helper для разметки метки:

Как я могу переопределить шаблон @ Html.LabelFor?

1 голос
/ 07 декабря 2011

Вы можете создать DisplayTemplate и получить к нему доступ через имя шаблона:

@Html.DisplayFor(x => x.Foo, "label")

А затем просто создайте шаблон с именем label.cshtml в папке DisplayTemplates.

Чтобы упростить этот вызов, вы можете написать метод расширения, который обрабатывает этот вызов:

public static MvcHtmlString TemplateLabelFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> property) 
{
    return html.DisplayFor(property, "label");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...