.NET Razor engine — Реализация макетов

#.net #razor

#.net #razor

Вопрос:

Я использую следующий фрагмент, чтобы включить создание шаблонов Razor в моем решении (за пределами ASP.NET MVC3). Возможно ли легко реализовать макеты?

Справочная информация:

Я нахожусь на этом этапе (шаблоны скомпилированы в compiledTemplateAssembly ):

 var template = (RazorTemplateBase<TModel>) compiledTemplateAssembly.
    CreateInstance("RazorSpace."   entry.TemplateName   "Template");
template.Model = model;
template.Execute();
var output = template.Buffer.ToString();
template.Buffer.Clear();
return output;
  

Я могу представить, что у моего Layout класса есть RazorTemplateBase свойство. Но тогда? Я понимаю, что Html.Partial это вспомогательная функция, которую я могу просто реализовать для анализа шаблона. Но как мне проанализировать эти вызовы методов renderBody() или renderSection() принять другие представления Razor?

Комментарии:

1. @casperOne: Я ценю правку, однако это не имеет «ничего» общего с MVC3. Я откатился из-за этого, однако другие изменения (кроме тегов) также откатываются…

2. @Ropstah: Теперь я это вижу (не переходил по ссылке). Вы должны каким-то образом указать это в вопросе (т. Е. «Я использую движок шаблонов Razor вне ASP.NET MVC3″с «использованием движка шаблонов Razor вне ASP.NET MVC3» связан), чтобы другим было понятно (большинство предположит, что это в ASP.NET MVC3. Пожалуйста, сохраните форматирование кода; в настоящее время оно не является чистым и отвлекает от вопроса.

3. @Ropstah: Я просто пошел дальше и сделал это. Теперь должно быть ясно как божий день.

4. Поймите, что любой razor за пределами mvc не содержит этих вспомогательных функций. MVC3 специально создает их для RazorEngine. Вы можете довольно легко добавить свой собственный, используя razor-engine.com путем добавления шаблона макета как части свойства базового шаблона.

5. @casperOne: ты звезда! :). @BuildStarted: Я понимаю, что мне нужно создать кое-что самому. Проблема в том, что я не понимаю, как «извлекать» эти вызовы методов из шаблона и превращать их в именованные разделы или ..? Для движка существует несколько «хостов» или «оболочек», ссылка, которую я разместил, работала в моей ситуации, поэтому я использую именно ее… Является ли тот, который в razor-engine.com отличается?

Ответ №1:

В настоящее время я работаю над чем-то очень похожим. Это фреймворк для создания шаблонов внешнего интерфейса, основанный на Nancy. Я расширил реализацию Nancy’s Razor, разработанную Филом Хааком. Мне удалось заставить работать частичные компоненты, шаблонные помощники и макеты.

Для визуализации макета у меня есть свойство Layout, а внутри макета у меня есть заполнитель содержимого «{{content}}». Итак, когда я визуализирую представление, если свойство Layout установлено, я визуализирую макет, а затем заменяю заполнитель содержимого.

Проект называется Appia. Взгляните на примеры представлений.

Вот моя реализация BaseViewРеализация BaseView, а вот код механизма просмотра. Он многое заимствует из реализации MVC Razor, а также содержит некоторые специфические для Nancy элементы, но разобраться, что происходит, не должно быть слишком сложно.