Domanda

Se guardo l'View Engine Razor, poi vedo una bella e concisa sintassi che non è particolarmente legata a generare codice HTML. Allora mi chiedo, quanto facile sarebbe quella di utilizzare il motore di asp.net all'esterno in un ambiente .net "normale", per esempio per generare il testo, codice, ...

Qualsiasi puntatore, ad esempio, commento o spiegazione è il benvenuto.

È stato utile?

Soluzione

Ci sono due problemi qui:

  1. Sì, è possibile eseguire l'esterno Razor vista del motore del contesto di un dominio applicazione ASP.NET, come spiegato nel blog di Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet-rivista-per-MVC3-rc.html
  2. Tuttavia, rasoio è ancora concentrata principalmente sulla generazione XML come marcatori (ad esempio HTML), nel senso che il parser Razor utilizza la presenza di <tags> per determinare la transizione tra il codice e la marcatura. Probabilmente si può usare per generare alcun testo, ma si potrebbe incorrere in problemi quando l'output non corrisponde ipotesi del rasoio su ciò che le vostre intenzioni sono.

Così, per esempio, mentre questo è un codice Razor valido (a causa del tag <div>):

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

Il seguente frammento è valido (perché il Ciao è ancora trattato come codice!):

@if(printHello) {
   Hello!
}

Tuttavia c'è un tag speciale <text> che può essere utilizzato per forzare una transizione per i blocchi multilinea (il tag <text> non sarà reso):

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

C'è anche una sintassi più breve per forzare una singola linea di transizione utilizzando @::

@if(printHello) {
   @:Hello!
}

Altri suggerimenti

RazorEngine , è un po 'quadro costruito sulla cima di rasoio che ti permette di fare questo.

Date un'occhiata al RazorTemplates biblioteca. E 'più leggero di biblioteca RazorEngine, la sua interfaccia minimale molto bello thread-safe e ha.

Compilazione e il rendering di un modello è semplice come due righe di codice:

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

Entrambi RazorEngine e RazorTemplates sono già menzionati qui, ma guarda che RazorMachine . Si può semplicemente puntare il non-MVC app per un ~ / Vista cartella (un altro) esistente MVC app, eseguire con l'invio di modello appropriato e ottenere output di rendering su 2 righe di codice:

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);

generare il codice o il testo: Vuoi dire come modelli T4: http: // msdn.microsoft.com/en-us/library/bb126445.aspx o strumenti CodeSmith?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top