Можно ли использовать двигатель Razor View View за пределами ASP.NET
-
26-09-2019 - |
Вопрос
Если я посмотрю на двигатель Razor View, то я вижу очень хороший и краткий синтаксис, который особо не привязан к генерации HTML. Поэтому мне интересно, насколько легко использовать двигатель за пределами ASP.NET в «нормальной» среде .NET, например, для генерации текста, кода, ...
Любой указатель, пример, комментарий или объяснение приветствуется.
Решение
Здесь есть две проблемы:
- Да, вы можете запустить двигатель Razor View за пределами контекста домена ASP.NET App, как объяснено в блоге Andrew's: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revized-for-mvc3-rc.html.
- Тем не менее, бритва все еще в первую очередь сосредоточен на генерировании XML-подобной разметки (например, HTML) в том смысле, что бритвенный парсер использует наличие
<tags>
Чтобы определить переход между кодом и разметкой. Возможно, вы можете использовать его для генерации любого текста, но вы можете столкнуться с проблемами, когда ваш выход не соответствует допущениям бритве о том, что являются вашими намерениями.
Так, например, пока это действительный код бритвы (из-за <div>
ярлык):
@if(printHello) {
<div>Hello!</div>
}
Следующий фрагмент недействителен (потому что привет! Все еще рассматривается как код):
@if(printHello) {
Hello!
}
Однако есть особый <text>
тег, который может быть использован для форсирования перехода для многострочных блоков ( <text>
Тег не будет отображаться):
@if(printHello) {
<text>Hello!
Another line</text>
}
Существует также более короткий синтаксис, чтобы заставить одну линию к переходу с использованием @:
:
@if(printHello) {
@:Hello!
}
Другие советы
Проверять Razorengine., Это маленький каркас, построенный на вершине бритвы, что позволяет это сделать.
Взгляни на Развернуть библиотека. Это более легкий, чем библиотека Razorengine, она безопасна и имеет очень хороший минимальный интерфейс.
Компиляция и рендеринга шаблона так же просто, как две строки кода:
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
Оба Razorengine. и Развернуть уже упоминаются здесь, но проверьте Омормачин. Отказ Вы можете просто указать свое приложение Non-MVC в папку ~ / View of (другое) существующего приложения 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. или инструменты для кодовых инструментов?