web-dev-qa-db-ja.com

asp.netの外でRazor View Engineを使用することは可能ですか

Razor View Engineを見ると、特にHTMLの生成に結び付けられていない、非常に簡潔で簡潔な構文が表示されます。したがって、テキスト、コードなどを生成するために、「通常の」.net環境でasp.netの外部のエンジンを使用するのはどれほど簡単でしょうか。

任意のポインタ、例、コメント、または説明を歓迎します。

102
Thomas

ここには2つの問題があります。

  1. はい、アンドリューのブログで説明されているように、Razor View EngineをASP.NETアプリドメインのコンテキスト外で実行できます。 http://vibrantcode.com/blog/2010/11/16/hosting-razor -out-of-aspnet-revised-for-mvc3-rc.html
  2. ただし、Razorパーサーは<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!
}
79
marcind

RazorEngine を確認してください。これを行うことができるのは、Razorの上に構築された小さなフレームワークです。

34
Ariel

RazorTemplates libraryを見てください。 RazorEngineライブラリよりも軽量で、スレッドセーフであり、非常に優れた最小限のインターフェイスを備えています。

テンプレートのコンパイルとレンダリングは、次の2行のコードと同じくらい簡単です。

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

RazorEngineRazorTemplatesの両方がすでにここで言及されていますが、チェックアウト- 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);
8
Antonin Jelinek

コードまたはテキストを生成します:T4テンプレートのように意味します: http://msdn.Microsoft.com/en-us/library/bb126445.aspx またはcodesmith tools?

3
Brian Mains