Универсальный шаблон редактора для DropDownList? - PullRequest
1 голос
/ 10 февраля 2012

Я пытаюсь сократить использование кода. У меня есть string.cshtml и multiline.cshtml EditorTemplate для строк и текстовых областей. Они достаточно универсальны, чтобы использовать их только один раз. Например, это мой string.cshtml (без постороннего HTML):

@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 для моих выпадающих списков. Что-то вроде:

...
@Html.DropDown("", ......)
....

Я пробовал варианты, используя код в круглых скобках для текстового поля выше, и я пытался выяснить, на основе моего фактического выпадающего списка, какой код идет туда. Мне не повезло.

Таким образом, я мог бы использовать либо [UIHint("TemplateName")], либо сделать что-то вроде @Html.EditorFor(m => m.MyProperty, "TemplateName"), чтобы вызвать его.

Вот как выглядит мой выпадающий список в обычном режиме:

...
@Html.DropDownListFor
(m => m.MyProperty, 
new SelectList(Model.MyPropertyList, 
"Value", "Text"))
...

Приведенный выше код работает отлично в моих представлениях, и если решения не будет, я просто продолжу использовать его повторно. Однако у меня есть другие выпадающие списки, которые я хочу создать, и я хочу поместить все выпадающие списки в шаблоны для повторного использования. Я думал, что было бы лучше иметь один выпадающий список EditorTemplate, чтобы управлять ими всеми. ;)

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Проблема в том, что для создания выпадающего списка вам нужно 2 свойства: скалярное свойство (MyProperty в вашем примере) для привязки выбранного значения и свойство коллекции (MyPropertyList в вашем примере).Шаблоны редактора подходят для отдельных свойств.Поэтому, если вы не определите какой-либо универсальный класс, который будет содержать эти 2 свойства для представления раскрывающегося списка, а затем определите шаблон редактора для этого универсального класса, ваш текущий код также должен работать нормально.

0 голосов
/ 07 сентября 2016

Не лучшее решение, но

@Html.DropDownList(ViewData.TemplateInfo.FormattedModelValue.ToString(),
new SelectList(ViewData["GenericSelectionList"] as IList),
ViewData["Id"].ToString(), ViewData["Name"].ToString())

и затем в вашем родительском представлении (или где бы оно ни называлось)

@html.EditorFor(x=> Model.ScalarProperty, new {GenericSelectionList  =YourList, Id ="IdProperty", Name ="NameProperty"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...