Razor ビューをメール送信用のテンプレートとして使用したいので、テンプレートをビューに「保存」し、それを文字列としてコントローラーに読み込み、必要な置換を行ってから送信します。
私のテンプレートは HTML ページとしてどこかにホストされていますが、それをアプリケーション (つまり、私のビュー) に入れたいと思っています。コントローラーでビューを文字列として読み取る方法がわかりません。
Razor ビューをメール送信用のテンプレートとして使用したいので、テンプレートをビューに「保存」し、それを文字列としてコントローラーに読み込み、必要な置換を行ってから送信します。
私のテンプレートは HTML ページとしてどこかにホストされていますが、それをアプリケーション (つまり、私のビュー) に入れたいと思っています。コントローラーでビューを文字列として読み取る方法がわかりません。
私は以下を使用します。ベースコントローラーがある場合は、それをベースコントローラーに配置します。そうすれば、すべてのコントローラーでアクセスできます。
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
RazorEngineライブラリを見てください。これはまさにあなたが望むことを実行します。以前にメールテンプレートに使用しましたが、うまく機能します。
あなたはちょうどこのようなことをすることができます:
// Read in your template from anywhere (database, file system, etc.)
var bodyTemplate = GetEmailBodyTemplate();
// Substitute variables using Razor
var model = new { Name = "John Doe", OtherVar = "Hello!" };
var emailBody = Razor.Parse(bodytemplate, model);
// Send email
SendEmail(address, emailBody);