Пользовательский шаблон редактора Asp.net MVC 3 не используется - PullRequest
10 голосов
/ 04 февраля 2012

У меня есть веб-приложение MVC 3, которое использует Razor View Engine. Я хотел бы расширить шаблоны редактора по умолчанию, чтобы добавить дополнительные атрибуты HTML5 к input элементам, таким как autofocus.

.

Я использую AdditionalMetadataAttribute, чтобы указать некоторые свойства моей сущности для автофокуса:

public class MyEntity
{
    public int Id { get; set; }

    [Required]
    [AdditionalMetadata("autofocus", true)]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    ...
}

Поскольку в представлениях scaffolding используется метод EditorFor, я решил подыграть и хотел переопределить шаблон String.cshtml по умолчанию, чтобы он также добавил любые дополнительные метаданные в качестве атрибутов. Подыгрывать означает, что я не хочу использовать TextBoxFor, где я могу контролировать атрибуты ввода.

Это мои незначительные изменения String.cshtml , который добавляет все дополнительные атрибуты метаданных в качестве входных атрибутов HTML:

@{
    // System.Diagnostics.Debugger.Break();
    this.ViewData.ModelMetadata.AdditionalValues.Add("class", "text-box single-line");
}
@Html.TextBox(string.Empty, ViewContext.ViewData.TemplateInfo.FormattedModelValue, this.ViewData.ModelMetadata.AdditionalValues)

Этот шаблон должен отображать те же input type=text с теми же классами CSS, но также с дополнительными атрибутами, если они есть.

Затем я помещаю этот файл в папку ~ / Views / Shared / EditorTemplates / , но кажется, что этот шаблон никогда не будет выбран, потому что все, что я получаю, это просто текстовое поле ввода по умолчанию.

Что я делаю не так?

1 Ответ

15 голосов
/ 05 февраля 2012

Ваш шаблон редактора String.cshtml никогда не создается из-за следующего атрибута: [DataType(DataType.Text)], который вы использовали для украшения свойства модели.

При этом используется шаблон ~/Views/Shared/EditorTemplates/Text.cshtml.

...