Чи можливо використовувати Razor View Engine поза asp.net


102

Якщо я дивлюся на механізм перегляду Razor, то я бачу дуже приємний і стислий синтаксис, який не особливо прив’язаний до генерування html. Тож мені цікаво, наскільки легко було б використовувати двигун поза asp.net у "нормальному" середовищі .net, наприклад, для створення тексту, коду, ...

Будь-який вказівник, приклад, коментар чи пояснення вітається.

Відповіді:


80

Тут є два питання:

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

Так, наприклад, поки це дійсний код Razor (через <div>тег):

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

Наступний фрагмент недійсний (тому що привіт! Досі розглядається як код):

@if(printHello) {
   Hello!
}

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

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

Існує також коротший синтаксис, щоб змусити один рядок до переходу за допомогою @::

@if(printHello) {
   @:Hello!
}

2
Добре, я думав про те, щоб використовувати його для створення таких речей, як електронні листи або генерація коду IronPython. Оскільки вони не використовують теги, можливо, краще переглянути інші варіанти. Дякую за відповідь.
Томас

6
@Thomas Razor у цих сценаріях повинен бути чудовим, вам просто доведеться додавати ці магічні <text>теги або використовувати це @:час від часу. Як тільки підтримка редактора VS з'явиться для синтаксису Razor, буде досить просто визначити, коли відбуваються переходи.
marcind

34

Перевірте RazorEngine , це невеликий каркас, побудований на вершині Razor, який дозволяє вам це зробити.


Виникли проблеми з установкою цього проекту в програмі націлювання .net 4, потребує оновлень.
Johnny_D

22

Погляньте на бібліотеку RazorTemplates . Він легший, ніж бібліотека RazorEngine, він безпечний для потоків і має дуже приємний мінімальний інтерфейс.

Складання та візуалізація шаблону проста, як два рядки коду:

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

1
Ви підкреслюєте безпеку нитки RazorTemplates b / c, одного з інших запропонованих рішень цього питання немає? Мене конкретно цікавить RazorEngine.
Стів Шеффлер

9

І RazorEngine, і RazorTemplates вже згадуються тут, але перевірте RazorMachine . Ви можете просто вказати додаток, який не є MVC, на папку ~ / Views (іншого) існуючого додатка MVC, виконати з надсиланням належної моделі та отримати виведений результат у двох рядках коду:

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

Створити код або текст: ти маєш на увазі шаблони T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx або інструменти кодексу?


Це потребує надбавки, оскільки T4 має схожість з Razor і є фактичним універсальним генератором коду, який поставляється поза коробкою як функція у Visual Studio - по суті це універсальний 'Бритву'
Дан Лінг

Наскільки я розумію, що шаблони T4 можна змінювати лише під час компіляції, файл .tt перетворюється і зберігається у форматі .cs. У моєму користуванні напівтехнічний користувач хотів би оновити шаблон без необхідності перебудови програми. Чи є простий спосіб цього досягти за допомогою шаблонів T4?
daveb

Можливо, до тих пір, що все, що він генерує, можна інтерпретувати, як CSHTML може працювати двигуном Razor під час виконання. Ви також можете програмувати його для створення коду, але компільований код повинен бути проаналізований компілятором, щоб бути корисним ....
Brian Mains
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.