質問はすでに尋ねられています(そして答えられています):
ビューを文字列としてレンダリング
これは私が使用するビットです:
protected string RenderViewToString<T>(string viewPath, T model, System.Web.Mvc.ControllerContext controllerContext) {
using (var writer = new StringWriter()) {
var view = new WebFormView(viewPath);
var vdd = new ViewDataDictionary<T>(model);
var viewCxt = new ViewContext(controllerContext, view, vdd, new TempDataDictionary(), writer);
viewCxt.View.Render(viewCxt, writer);
return writer.ToString();
}
}
このメソッドの最適な場所は、mvc プロジェクトが参照しているクラス ライブラリ プロジェクトです。主な理由は、すべてのアプリで簡単に再利用できるからです。しかし、それはアプリケーションロジックでもなく(コントローラーに属していないため)、モデルにも属していないためです。いくつかのものは単なるユーティリティです。
これを機能させるには、viewPath パラメーターがファイルへの PHYSICAL PATH である必要があり、拡張子が .aspx であることに注意してください。WebFormView クラスはコンストラクターで物理パスを必要とするため、ルートを使用することはできません。
これにより、完全なビューがレンダリングされ、マスター ページが考慮されます。
HTML メールの健康に関する警告:
HTML メールとそれを読むデバイスは、Web サイトやブラウザーよりも設計が難しく、制限されています。あるもので機能するものは、別のものでは機能しません。したがって、HTML メールでは、シンプルに保つ必要があります。メニューや関連画像などを含む素敵なページは、すべての電子メール デバイスでは機能しません。例として、イメージの src 属性は絶対である必要があり、ドメインを含める必要があります。
これはうまくいきません:
<img src="/Images/MyImage.gif" ... />
ビットこれは:
<img src="http://www.mywebsite.com/Images/MyImage.gif" ... />
これらの注意事項があれば、問題なく動作し、使用しています。あなたのウェブサイトの完全なギミックを彼らに送ろうとしないでください。
さらに重要:
すべての CSS は INLINE である必要があり、色、境界線、パディングなどの基本的なスタイル設定のみを行う必要があります。しかし、フローティングとポジショニングはありません。CSS レイアウトは、デバイス間で一貫して機能しません!