回答:
ここには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>
}
を使用して単一行を強制的に遷移させる短い構文もあります@:
。
@if(printHello) {
@:Hello!
}
<text>
タグを追加するか、時々使用する必要があります@:
。VSエディターのサポートがRazor構文に対応するようになると、遷移がいつ発生するかを簡単に知ることができます。
RazorEngineを確認してください。これは、Razorの上に構築された小さなフレームワークで、これを行うことができます。
RazorTemplatesライブラリを見てください。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?