web-dev-qa-db-fra.com

Est-il possible d'utiliser Razor View Engine en dehors d'asp.net

Si je regarde le moteur de visualisation Razor, je vois une syntaxe très agréable et concise qui n'est pas particulièrement liée à la génération de code HTML. Je me demande donc à quel point il serait facile d'utiliser le moteur en dehors d'asp.net dans un environnement .net "normal" par exemple pour générer du texte, du code, ...

Tout pointeur, exemple, commentaire ou explication est le bienvenu.

102
Thomas

Il y a deux problèmes ici:

  1. Oui, vous pouvez exécuter Razor View Engine en dehors du contexte d'un domaine d'application ASP.NET, comme expliqué dans le blog d'Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor -outside-of-aspnet-revision-for-mvc3-rc.html
  2. Cependant, Razor se concentre toujours principalement sur la génération de balises de type xml (par exemple HTML) dans le sens où l'analyseur Razor utilise la présence de <tags> pour déterminer la transition entre le code et le balisage. Vous pouvez probablement l'utiliser pour générer n'importe quel texte, mais vous pourriez rencontrer des problèmes lorsque votre sortie ne correspond pas aux hypothèses de Razor sur vos intentions.

Ainsi, par exemple, alors qu'il s'agit d'un code Razor valide (en raison du <div> tag):

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

L'extrait de code suivant n'est pas valide (car Hello! Est toujours traité comme du code):

@if(printHello) {
   Hello!
}

Cependant, il existe un <text> tag qui peut être utilisé pour forcer une transition pour les blocs multilignes (le <text> la balise ne sera pas rendue):

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

Il existe également une syntaxe plus courte pour forcer la transition d'une seule ligne à l'aide de @::

@if(printHello) {
   @:Hello!
}
79
marcind

Vérifiez RazorEngine , c'est un petit framework construit au-dessus de Razor qui vous permet de le faire.

34
Ariel

Jetez un œil à la bibliothèque RazorTemplates . Il est plus léger que la bibliothèque RazorEngine, il est compatible avec les threads et possède une interface minimale très agréable.

La compilation et le rendu d'un modèle sont aussi simples que deux lignes de code:

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

RazorEngine et RazorTemplates sont déjà mentionnés ici, mais consultez - RazorMachine . Vous pouvez simplement pointer votre application non MVC vers un dossier ~/Views d'une (autre) application MVC existante, exécuter avec l'envoi du modèle approprié et obtenir une sortie rendue sur 2 lignes de code:

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);
8
Antonin Jelinek

Générez du code ou du texte: vous voulez dire comme les modèles T4: http://msdn.Microsoft.com/en-us/library/bb126445.aspx ou des outils de codemith?

3
Brian Mains