7

MVC ビューを使用して電子メールの本文を作成したいのですが、これ ( http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ )に遭遇しましたが、そうではありません強く型付けされたビュー (ViewContext が null) では機能しないようです。しかし、マスターページを含む完全なビューをレンダリングする何かを求めていました。

リダイレクトせずにビューを呼び出して別のストリームに書き込み、コントローラー内でメールを送信する方法があればそれができると思いましたが、ビューを呼び出す方法がわかりません。

どんな提案も素晴らしいでしょう!

前もって感謝します。

ギフスター

4

2 に答える 2

15

質問はすでに尋ねられています(そして答えられています):

ビューを文字列としてレンダリング

これは私が使用するビットです:

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 レイアウトは、デバイス間で一貫して機能しません!

于 2010-11-12T11:10:44.717 に答える
4

これを行うには、MvcView NuGet パッケージを使用できます。シンプルで、install-package MvcMailer を使用してインストールするだけで完了です! テンプレート、マスターページ、モデルの表示、HTML メールの送信にビューエンジンをフル活用!

于 2011-01-12T23:33:33.123 に答える