5

ASP.NET MVC ビュー エンジンを使用して html をレンダリングし、電子メールで送信するのは良い考えであり、実行可能でしょうか?

ビューを文字列にレンダリングできることはわかっています。そのため、メール メッセージの作成に使用できます。ASP.NET MVC はアプリケーションで既に使用されているため、「メール ビュー」に Brail や NVelocity を使用しなくても、すべての実用的な ASP.NET MVC を使用できます。

良いアイデア?注意事項はありますか?例:) ?

4

4 に答える 4

4

はい、それは良い考えであり、比較的簡単に実装できます。

于 2010-09-08T07:45:13.347 に答える
1

個人的にはいい考えだと思います。プレースホルダーを含むマークアップをデータベースに入れるよりも確実に優れています。

欠点は、これらのテンプレートを編集し、プロジェクトを再コンパイルして再デプロイするには、Visual Studio が必要になることです。テンプレートの操作を他の非技術スタッフに「アウトソーシング」することはできません。

はい、新しいテンプレートを追加するには、個人的な介入も必要です。

于 2010-09-08T07:45:24.070 に答える
1

ここでは、拡張メソッドとしての RenderPartialToString の私のバージョンを示します (パスなども処理します)。

public static class ExtensionMethods
{
    public static string RenderPartialToString(this ControllerBase controller, string partialName, object model)
    {
        var vd = new ViewDataDictionary(controller.ViewData);
        var vp = new ViewPage
        {
            ViewData = vd,
            ViewContext = new ViewContext(),
            Url = new UrlHelper(controller.ControllerContext.RequestContext)
        };

        ViewEngineResult result = ViewEngines
                                  .Engines
                                  .FindPartialView(controller.ControllerContext, partialName);

        if (result.View == null)
        {
            throw new InvalidOperationException(
            string.Format("The partial view '{0}' could not be found", partialName));
        }
        var partialPath = ((WebFormView)result.View).ViewPath;

        vp.ViewData.Model = model;

        Control control = vp.LoadControl(partialPath);
        vp.Controls.Add(control);

        var sb = new StringBuilder();

        using (var sw = new StringWriter(sb))
        {
            using (var tw = new HtmlTextWriter(sw))
            {
                vp.RenderControl(tw);
            }
        }
        return sb.ToString();
    }
}

利用方法:

return this.RenderPartialToString("YourPartialView", yourModel);

お役に立てれば..

ジム

于 2010-09-08T08:33:19.110 に答える
0

MVCMailer NuGet を使用できます。これは MVC ビュー テンプレートを使用し、コードを 1 行書くだけでこれを実行できます。

于 2011-01-12T23:30:58.507 に答える