У меня есть веб-приложение MVC 3, в котором используется механизм просмотра Razor. Я хотел бы расширить шаблоны редактора по умолчанию, поэтому я хотел бы добавить дополнительные атрибуты HTML5 к input
элементам, таким как autofocus
.
Я использую AdditionalMetadataAttribute
, чтобы указать определенные свойства на моей сущности для автофокусировки:
public class MyEntity
{
public int Id { get; set; }
[Required]
[AdditionalMetadata("autofocus", true)]
[DataType(DataType.Text)]
public string Name { get; set; }
...
}
Поскольку в режиме просмотра используется метод 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/, но кажется, что этот шаблон никогда не подбирается, потому что все, что я получаю, это текстовое поле ввода по умолчанию.