Повторное использование шаблонов DisplayTemplates и EditorTemplates

При работе с шаблонами отображения и редактирования достаточно быстро возникает необходимость повторного использования однажды написанных шаблонов.

Однако, по аналогии с portable areas, при попытке выноса шаблонов в отдельную сборку возникают проблемы, связанные с тем, что MVC ищет данные шаблоны в строго отведенных местах (папка ~/Views/Shared/DisplayTemplates или ~/Views/ControllerName/EditorTemplates).

Решает эту проблему очередной open-source продукт от Дэвида Эббо — Razor Generator.

Razor Generator позволяет компилировать MVC-шные вьюшки при компиляции проекта (а не в рантайме, как обычно), что дает возможность оптимизировать время «первого открытия странички» у клиента (во время которого обычно и производится компиляция). Также в проекте реализован кастомный VirtualPathProvider, что позволяет использовать эти скомпилированные вьюшки, как будто они лежат в аналогичных папках в вашем веб-проекте.

Этим мы и воспользуемся для распространения наших Display/EditorTemplates.

Установка Razor Generator достаточно подробно расписана на странице плагина: в Visual Studio необходимо установить расширение Razor Generator (через меню Tools->Extension Manager), а в сборку с шаблонами необходимо подключить NuGer пакет RazorGenerator.Mvc (его необходимо будет подключить и к проекту, который будет использовать сборку с шаблонами).

Перенесем пару шаблонов из предыдущей статьи в отдельную сборку (поместим их по привычному пути ~/Views/Shared/EditorTemplates):

При этом каждому из шаблонов необходимо выставить свойству Custom Tool значение RazorGenerator.
После сохранения и компиляции проекта мы должны получить для каждого шаблона по еще одной «скомпилированной» копии:

В основном проекте теперь необходимо лишь добавить референс на сборку с шаблонами, установить NuGet пакет RazorGenerator.Mvc, и с удовольствием и лёгкостью повторно использовать шаблоны редактирования/представления:

Опубликовать в Facebook
Опубликовать в Google Plus

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *