Можно ли использовать Razor View Engine снаружи asp.net


Если я посмотрю на движок Razor View, то я вижу очень хороший и краткий синтаксис, который не особенно привязан к генерации html. Поэтому мне интересно, насколько легко было бы использовать двигатель снаружи asp.net в "нормальной" среде .net, например, для создания текста, кода,...

любой указатель, пример, комментарий или объяснение приветствуется.

5 97

5 ответов:

здесь есть два вопроса:

  1. Да, вы можете запустить Razor View Engine вне контекста ASP.NET домен приложения, как поясняется в блоге Андрея: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
  2. тем не менее, Razor по-прежнему в основном ориентирован на создание XML-подобной разметки (например, HTML) в том смысле, что анализатор Razor использует наличие <tags> для определения перехода между кодом и разметкой. Вероятно, вы можете использовать его для создания любого текста, но вы можете столкнуться с проблемами, когда ваш вывод не соответствует предположениям Razor о том, каковы ваши намерения.

так например пока это действительный код бритвы (из-за <div> tag):

@if(printHello) {
   <div>Hello!</div>
}

следующий фрагмент является недопустимым (потому что Привет! по-прежнему рассматривается как код):

@if(printHello) {
   Hello!
}

однако есть специальный <text> тег, который может быть использован для принудительного переход для многострочных блоков (<text> тег не будет отображаться):

@if(printHello) {
   <text>Hello!
   Another line</text>
}

существует также более короткий синтаксис, чтобы заставить одну строку перейти с помощью @::

@if(printHello) {
   @:Hello!
}

Регистрация RazorEngine, это небольшая структура, построенная поверх бритвы, которая позволяет вам это делать.

посмотри RazorTemplates библиотека. Он более легкий, чем библиотека RazorEngine, он потокобезопасен и имеет очень приятный минимальный интерфейс.

компиляция и рендеринг шаблона так же просто, как двумя строками кода:

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));

и RazorEngine и RazorTemplates уже упоминались здесь, но проверить RazorMachine. Вы можете просто указать свое приложение без MVC в папку ~ / Views (другого) существующего приложения MVC, выполнить с отправкой правильной модели и получить вывод на 2 строки кода:

var sb = new StringBuilder();

//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets);

//do whatever you want with result
sb.Append(template);

генерировать код или текст: вы имеете в виду, как Шаблоны T4:http://msdn.microsoft.com/en-us/library/bb126445.aspx или codesmith tools?