3

基本的に部分的なサブページのインクルードを使用して、RAZOR で静的な HTML ページを生成したいと考えています。

  1. 私も T4 を試しましたが、代替手段を探しています。ここここを参照してください。
  2. この回答は可能だと言っていますが、具体的な例はありません
  3. これが進むべき道だと思ったので、Razorジェネレーターをインストールしましたが、これで静的HTMLを生成する方法がわかりません。

T4 の概念のように動作する完全な拡張機能が最適ですが、RAZOR 構文とHTML フォーマットを使用できます(フォーマットの問題が基本的に T4 を使用しない理由です)。

4

2 に答える 2

3

Razorビューを取得してコンパイルし、HTMLを生成しようとしている場合は、次のようなものを使用できます。

public static string RenderViewToString(string viewPath, object model, ControllerContext context)
{
    var viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
    var view = viewEngineResult.View;


    context.Controller.ViewData.Model = model;

    string result = String.Empty;
    using (var sw = new StringWriter())
    {

        var ctx = new ViewContext(context, view,
                                  context.Controller.ViewData,
                                  context.Controller.TempData,
                                  sw);
        view.Render(ctx, sw);

        result = sw.ToString();
    }

    return result;
}

またはControllerContextの外部http://razorengine.codeplex.com/

于 2012-09-11T23:22:23.013 に答える
1

Razor ジェネレーターの現在のバージョンには、"Generator" オプションがあり、"MvcHelper" ジェネレーターと共に使用すると、ヘルパーの静的メソッドも生成されます。

たとえば、次の行を CSHTML ファイルの先頭に追加します (もちろん、カスタム ツールの Visual Studio プロパティを RazorGenerator に設定します)。

@* Generator: MvcHelper, GeneratePrettyNames : true *@

きれいな名前のオプションは厳密には必要ありませんが、アンダースコアを含む非常に長いクラス名を避けるために、デフォルトにする必要があると感じています:-)

既にご存知かもしれませんが、この方法の主な利点は、ヘルパーを個別のアセンブリで共有できることです。それが、私が最初に Razor Generator を使用する理由です。

同じアセンブリ内であっても、App_Code フォルダーの外にコードを残すことができるようになりました。ただし、これは (少なくともセキュリティのために) ベスト プラクティスではなく、Visual Studio デザイナーは混乱します。メソッドはまだ静的ではないと考えていますが、そうではなく、正常に動作します。

高速化のために同じサイト/アセンブリの App_Code フォルダーでヘルパーのプロトタイプを作成し、テスト時に共有コンポーネントにコピーしています。このソリューションが必要だった理由は、HtmlHelper で HTML のすべての部分を手作業でコーディングせずに汎用の Bootstrap ヘルパーを作成するためでした。つまり、@chrismillerukのこのソリューションと一緒に使用します。

後で、速度を上げるために CSHTML ヘルパーをハンドコーディングされた HtmlHelper に変換する必要があるかもしれません。しかし、まず最初に、自動化したい HTML コードのブロックをコピーして貼り付ける機能から、開発速度が大幅に向上し、同じフォーマット/エディターでそれらをすばやく完成させてデバッグすることができます。

于 2015-07-24T11:51:20.700 に答える