このトピックに対処する同様の質問がいくつかあることは知っていますが、その答えには満足していません。
私が欲しいのは、レイアウトページと部分ビューで強く型付けされたビューを使用できるRazorViewエンジンを最大限に活用することです。ビューの上部でモデルを宣言し、そのモデルを渡すだけです。とても簡単!ビューに渡す直前に明示的に構築する必要のある動的モデルはありません。編集:これは、Webアプリケーションの外部、電子メールの本文を作成できるクラスライブラリの内部で行いたいと思います。これがここでの本当の問題は、WebアプリではないRazorViewEngineを利用することです。
この背後にある考え方は、User
20個のプロパティを持つオブジェクトがあり、ウェルカムメールの最初のバージョンでは名前のみを使用しているが、後でテンプレートを編集してそのアドレスまたはアドレスCity
を使用できるようにしたい場合です。コードを追加したり、再コンパイルして再デプロイしたりせずに、Razorビューを更新します。State
Email
私はRazorEngineを見て、アイデアとシンプルさが大好きですが、すべてが動的なタイプです。ここでの私の問題は、データベースからモデルとしてデータをプルすることです。物事を動的タイプに押し込む必要があるため、ビューにすべてのプロパティを取得することはできません。
MvcMailerも表示されます。これも理論的には優れていますが、ビューに渡されるすべてのデータモデルが動的であり、強く型付けされていないという同じ問題があります。
私はこれの独自のバージョンを構築し始めました。これには、System.Web.Mvc、System.Web.Razor、System.Web.WebPagesなどのいくつかのWeb名前付けが必要になります-そして私はそれで大丈夫です。問題は、HttpContextとControllerContextとRouteDataの欠如です....私がモック/スタブしようとしているので。私は現在、DisplayModesを調査し、実際のWebコンテキストの外でこれらをモックする方法を見つけようとしています。
もっと良い方法はありますか?前述の2つのフレームワークのいずれかを提案する場合は、私の問題に注意し、回避策があるかどうかをお知らせください。
編集2: RazorEngineでもう少し遊んだ後、強く型付けされたモデルは必ずしも私が思っていたほどの問題ではありません。今のところ私が望んでいるのは、レイアウトページと部分ビューも使用できることです。置き換えられる文字列プレースホルダーを使用してこれをハックすることはできますが、おそらくあまり効率的ではなく、あまり柔軟ではありません。