Я пытаюсь сократить использование кода. У меня есть string.cshtml и multiline.cshtml EditorTemplate для строк и текстовых полей. Они достаточно общие, чтобы просто использовать один раз. Например, это мой string.cshtml (без посторонней HTML):Generic EditorTemplate для DropDownList?
@Html.Label(ViewData.ModelMetadata.DisplayName)
@Html.TextBox("",
ViewData.TemplateInfo.FormattedModelValue,
new { placeholder = ViewData.ModelMetadata.Watermark })
@if (ViewData.ModelMetadata.IsRequired)
{
@:<span class="required"></span>
}
@Html.ValidationMessage("")
Это в значительной степени то же самое для моего текстового поля. То, что я надеюсь сделать, это создать аналогичный EditorTemplate для моих dropdownlists. Что-то вроде:
...
@Html.DropDown("", ......)
....
Я попытался изменения с помощью кода в скобках для текстового поля выше и я попытался выяснить, на основании моего фактического DropDownList, какой код идет там. Мне не повезло.
Таким образом, я мог бы использовать либо [UIHint("TemplateName")]
, либо сделать что-то вроде @Html.EditorFor(m => m.MyProperty, "TemplateName")
, чтобы вызвать его.
Вот что мой DropDownList выглядит в обычном виде:
...
@Html.DropDownListFor
(m => m.MyProperty,
new SelectList(Model.MyPropertyList,
"Value", "Text"))
...
Приведенный выше код работает в моих взглядах мелкий, и если нет никакого решения, я просто буду повторно использовать его. Тем не менее, у меня есть другие dropdownlists, которые я хочу создать, и я хочу поместить все dropdownlists в шаблоны для повторного использования. Я подумал, что было бы лучше иметь один dropdownlist EditorTemplate, чтобы управлять ими всеми. ;)
Спасибо за большое объяснение. Я просто поставлю свой рабочий код в шаблон с другими элементами управления формы для повторного использования. Эти шаблоны уже используют '@ Html.EditorFor()', которые используют String.cshtml и MultilineText.cshtml EditorTemplates. – REMESQ