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


102

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

ポインタ、例、コメント、説明は大歓迎です。

回答:


80

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

  1. はい、Andrewのブログ(http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of)で説明されているように、ASP.NETアプリドメインのコンテキスト外でRazor View Engineを実行できます。-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>
}

を使用して単一行を強制的に遷移させる短い構文もあります@:

@if(printHello) {
   @:Hello!
}

2
それを使って、電子メールやオンザフライのIronPythonコード生成などを生成することを考えていました。これらはタグを使用しないため、他の選択肢を検討することをお勧めします。答えてくれてありがとう。
トーマス

6
@Thomas Razorはこれらのシナリオで問題なく機能するはずです。マジック<text>タグを追加するか、時々使用する必要があります@:。VSエディターのサポートがRazor構文に対応するようになると、遷移がいつ発生するかを簡単に知ることができます。
行進

34

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


このプロジェクトを.net 4ターゲットアプリケーションにインストールするときに問題が発生したため、更新が必要です。
Johnny_D 2014年

22

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

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

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

1
RazorTemplates b / cのスレッドセーフティを強調表示していますか?特にRazorEngineに興味があります。
Steve Scheffler、

9

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

3

コードまたはテキストを生成する:T4テンプレートのようなものです:http : //msdn.microsoft.com/en-us/library/bb126445.aspxまたはcodesmith tools?


T4にはRazorとの類似点があり、Visual Studioの機能としてそのまま出荷される実際の多目的コードジェネレーターであるため、これには賛成票が必要です。基本的に、多目的「Razor」
Dan Ling

T4テンプレートはコンパイル時にのみ変更でき、.ttファイルは.csファイルに変換されて保存されると私は理解しています。私の使用方法では、セミテクニカルユーザーが、アプリケーションを再構築せずにテンプレートを更新したいと考えています。T4テンプレートを使用してこれを実現する簡単な方法はありますか?
daveb 2017年

おそらく、CSHTMLのように、生成されているものが解釈できる限り、実行時にRazorエンジンで実行できます。あなたはまた、プログラマブルにそれがコードを生成するためにトリガすることができますが、コンパイルされたコードが使用可能であることをコンパイラによって解析されなければなら....
ブライアン・メインズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.