Передача дополнительных данных в EditorTemplate - PullRequest
9 голосов
/ 12 августа 2011

Допустим, у меня есть LineItem (из примера часто используемой корзины покупок), и я хочу визуализировать его с помощью EditorTemplate.

Я в порядке, отображая его с использованием @ Html.EditorFor (m =>m.LineItems) из родительского представления (частичное или иное), но то, что сбивает с толку, является наилучшим подходом для передачи некоторых дополнительных данных (скажем, SelectList, который имеет данные, поступающие из базы данных) в шаблон.

Ясно, что я не должен загрязнять модель LineItem, добавляя эти посторонние элементы (которые, однако, необходимы с точки зрения представления).

Я пытаюсь увидеть, есть ли строго типизированный способ сделать это, прежде чем прибегать к ViewBag/ Трюки ViewData.

Я пытался создать модель представления, специфичную для LineItem, для передачи данных, но она искажает имена, генерируемые MVC, и рекламирует дополнительный слой в коллекции (когда я передаю вIEnumerable <> модели представления для вызова EditorFor () вместо IEnumerable <> фактического LineItem)

Такжеэто неправильное использование EditorTemplate?Требуется ли для LineItem раскрывающийся список, в котором параметры из таблицы базы данных слишком велики для шаблона EditorTemplate?

Пожалуйста, направьте меня к нирване MVC.Пока я жду ответов, я опробую другие идеи!

Чтобы уточнить: причина, по которой я рассматриваю использование EditorTemplate, заключается в автоматической обработке коллекции, которую он мне предоставляет.В противном случае весь бизнес [id] становится слишком липким.

1 Ответ

11 голосов
/ 12 августа 2011

Я недавно столкнулся с той же проблемой и нашел это решение.

Чтобы подвести итог, вы должны создать свою собственную модель представления, охватывающую исходную коллекцию и необходимые вспомогательные данные. Затем в представлении, вызывающем пользовательский шаблон, вы можете использовать перегрузки метода расширения HtmlHelper для передачи вспомогательных данных в словарь ViewData. Из вашего пользовательского шаблона вы можете затем извлечь и использовать их frin ViewData.

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

Пожалуйста, дайте мне знать, если это соответствует вашему сценарию или если вы найдете какое-либо другое решение.

...