Можно ли использовать Razor View Engine за пределами asp.net? - PullRequest
100 голосов
/ 02 сентября 2010

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

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

Ответы [ 5 ]

78 голосов
/ 03 сентября 2010

Здесь есть две проблемы:

  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 относительно ваших намерений.

Так, например, пока это действительный код Razorтега <div>):

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

Следующий фрагмент недействителен (поскольку Hello! все еще обрабатывается как код):

@if(printHello) {
   Hello!
}

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

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

Существует также более короткий синтаксис для принудительного перехода одной строки с использованием@::

@if(printHello) {
   @:Hello!
}
33 голосов
/ 11 октября 2011

Проверьте RazorEngine , это небольшой фреймворк, построенный поверх Razor, который позволяет вам делать это.

21 голосов
/ 20 ноября 2012

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

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

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
8 голосов
/ 28 ноября 2012

Обе 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);
3 голосов
/ 02 сентября 2010

Генерация кода или текста: вы имеете в виду как шаблоны T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx или инструменты для работы с кодировщиками?

...