Razor View Engineを見ると、特にHTMLの生成に結び付けられていない、非常に簡潔で簡潔な構文が表示されます。したがって、テキスト、コードなどを生成するために、「通常の」.net環境でasp.netの外部のエンジンを使用するのはどれほど簡単でしょうか。
任意のポインタ、例、コメント、または説明を歓迎します。
ここには2つの問題があります。
<tags>
の存在を使用してコードとマークアップ間の遷移を決定するという意味で、Razorは依然として主にxmlに似たマークアップ(HTMLなど)の生成に重点を置いています。おそらくテキストを生成するためにこれを使用できますが、出力がRazorの意図と一致しない場合に問題が発生する可能性があります。たとえば、これは有効なRazorコードですが(<div>
タグのため):
@if(printHello) {
<div>Hello!</div>
}
次のスニペットは無効です(Hello!はまだコードとして扱われているため):
@if(printHello) {
Hello!
}
ただし、複数行ブロックの遷移を強制するために使用できる特別な<text>
タグがあります(<text>
タグはレンダリングされません)。
@if(printHello) {
<text>Hello!
Another line</text>
}
@:
を使用して1行を強制的に遷移させる短い構文もあります。
@if(printHello) {
@:Hello!
}
RazorEngine を確認してください。これを行うことができるのは、Razorの上に構築された小さなフレームワークです。
RazorTemplates libraryを見てください。 RazorEngineライブラリよりも軽量で、スレッドセーフであり、非常に優れた最小限のインターフェイスを備えています。
テンプレートのコンパイルとレンダリングは、次の2行のコードと同じくらい簡単です。
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
RazorEngineとRazorTemplatesの両方がすでにここで言及されていますが、チェックアウト- RazorMachine 。非MVCアプリを(別の)既存のMVCアプリの〜/ Viewsフォルダーにポイントし、適切なモデルを送信して実行し、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 またはcodesmith tools?