2009-09-23 10 views
6

私がやっていることは、さまざまなテンプレートを使って電子メールコンテンツを生成することです。ASP.NET MVCでデータベースから取得したテンプレートからビューをレンダリングすることは可能ですか?

ASP.NET MVCはこれに適していると思います。私のコントローラは、電子メールに必要なデータを取得し、レンダリングするビュー(テンプレート)を決定します。 (単なるメールマージであれば、条件付きブロック、foreach'sなどが必要です)

これらのテンプレートをWebアプリケーションのファイルではなくデータベースに保存できるようにしたいのですがWebアプリケーション自体から簡単に新しいテンプレートを追加することができます。

これは可能ですか?私はWebFormsビューエンジンを使用できるようにするのが好きですが、それが不可能な場合は他のビューエンジンを検討します。私は理想的に型付きのビューを使用したいと思います。

+1

テンプレートをデータベースに格納するのは簡単な作業です。強く型付けされたASP.NET MVCビューページをコントローラアクション内の文字列にレンダリングすることは、より困難になります。 –

+2

まったく同じ目的のためNVvelocityビューエンジン(http://nvelocity.codeplex.com/)を使い終わった。 –

答えて

2

残念ながら、WebForms ViewEngineはいくつかの内部クラスを使用してaspxファイルとascxファイルをコンパイルするため、これは不可能です。そのViewEngineは、ビューがサイトのルート内のフォルダ内のファイルとして利用可能であることを要求します(仮想フォルダはIIRCでも動作します)。

XSLTを使用するものも含め、目的に合った他のViewEngineがあります。

AFAIR複数のViewEngineを同じアプリケーションで混在させることができるので、通常のWebページ用にWebFormsエンジンを使用し、電子メール用に別のViewEngineを使用できます。

+0

WebForms ViewEngineでは、ビューが既にアプリケーションでコンパイルされている必要がありますか?それとも、実行時にコンパイルしますか? これらの内部クラスにアクセスし、実行時に提供するコンテンツからビューをコンパイルすることは、リフレクションを通して可能な場合があります。私は自分自身でビューエンジンの内部動作をまだ見ていません。 – sectrean

+0

実行時にビューをコンパイルします。実行時にリフレクションを使用してコンパイルすることができたとしても、ファイルからコンパイルするのはハードワイヤードなので、それは簡単なことではありません。...可能かもしれません。 –

+0

Razorを使用してDatalayerから仮想ファイルプロバイダとカスタムviewEngineを使用してデータベースを作成します。かみそりは独立して動作することができますが、明らかに実装は厳密です。 ie-Vi​​ewBagなし – ppumkin

2

実際には、同じアプリケーション内で複数のビューエンジンを使用できます。フレームワークは、要求されたビューをレンダリングできるかどうかを各エンジンに尋ねます。他の利用可能なビューエンジンについては、MvcContribをチェックしてください。

WebForms ViewEngineは、ASP.NETと同様にビュー(aspx、ascx)が物理的にファイルシステムに格納されていることを前提にしていますASP.NETではVirtualPathProviderのようなものがありましたが)、私は信じていました。共有ポイント)。

独自のビューエンジンを作成する場合は、IViewEngineを実装し、ビューエンジンをViewEnginesコレクションに追加する必要があります。 Application_Startにあります。

1

Phil Haackはgreat articleをここに似ています。

私はそれがあなたのニーズに適応できると思います。

優しさ、あなたのviewengineのでごbuildmanagerを作成する必要が

ダン

0

。あなたのビューエンジンはdbからaspxの部分を取得し、webformエンジンを呼び出すことができます。容易ではありませんが、それは主にあなたがこれを必要とし、どのように素晴らしいROIで報われるかによって決まります。