ASP.NET MVC ビュー エンジンを使用して html をレンダリングし、電子メールで送信するのは良い考えであり、実行可能でしょうか?
ビューを文字列にレンダリングできることはわかっています。そのため、メール メッセージの作成に使用できます。ASP.NET MVC はアプリケーションで既に使用されているため、「メール ビュー」に Brail や NVelocity を使用しなくても、すべての実用的な ASP.NET MVC を使用できます。
良いアイデア?注意事項はありますか?例:) ?
ASP.NET MVC ビュー エンジンを使用して html をレンダリングし、電子メールで送信するのは良い考えであり、実行可能でしょうか?
ビューを文字列にレンダリングできることはわかっています。そのため、メール メッセージの作成に使用できます。ASP.NET MVC はアプリケーションで既に使用されているため、「メール ビュー」に Brail や NVelocity を使用しなくても、すべての実用的な ASP.NET MVC を使用できます。
良いアイデア?注意事項はありますか?例:) ?
はい、それは良い考えであり、比較的簡単に実装できます。
個人的にはいい考えだと思います。プレースホルダーを含むマークアップをデータベースに入れるよりも確実に優れています。
欠点は、これらのテンプレートを編集し、プロジェクトを再コンパイルして再デプロイするには、Visual Studio が必要になることです。テンプレートの操作を他の非技術スタッフに「アウトソーシング」することはできません。
はい、新しいテンプレートを追加するには、個人的な介入も必要です。
ここでは、拡張メソッドとしての 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);
お役に立てれば..
ジム
MVCMailer NuGet を使用できます。これは MVC ビュー テンプレートを使用し、コードを 1 行書くだけでこれを実行できます。