Можно ли использовать Razor View Engine вне asp.net
Если я посмотрю на Razor View Engine, я вижу очень красивый и сжатый синтаксис, который не особенно привязан к генерации html. Поэтому мне интересно, как легко было бы использовать движок вне asp.net в "нормальной" среде .net, например, для генерации текста, кода,...
Приветствуется любой указатель, пример, комментарий или объяснение.
Ответы
Ответ 1
Здесь есть две проблемы:
- Да, вы можете запустить Razor View Engine вне контекста домена приложения ASP.NET, как описано в блоге Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
- Тем не менее, 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!
}
Ответ 2
Отметьте RazorEngine, это небольшая структура, построенная поверх Razor, которая позволяет вам это делать.
Ответ 3
Взгляните на библиотеку RazorTemplates. Он более легкий, чем библиотека RazorEngine, он поточно-безопасный и имеет очень хороший минимальный интерфейс.
Компиляция и рендеринг шаблона просты, как две строки кода:
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
Ответ 4
Оба 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);
Ответ 5
Сгенерировать код или текст: вы имеете в виду как T4 Шаблоны: http://msdn.microsoft.com/en-us/library/bb126445.aspx или инструменты для ввода кода.