13

Razor ビューをメール送信用のテンプレートとして使用したいので、テンプレートをビューに「保存」し、それを文字列としてコントローラーに読み込み、必要な置換を行ってから送信します。

私のテンプレートは HTML ページとしてどこかにホストされていますが、それをアプリケーション (つまり、私のビュー) に入れたいと思っています。コントローラーでビューを文字列として読み取る方法がわかりません。

4

2 に答える 2

19

私は以下を使用します。ベースコントローラーがある場合は、それをベースコントローラーに配置します。そうすれば、すべてのコントローラーでアクセスできます。

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();
    }
}
于 2013-03-12T20:35:05.777 に答える
6

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);
于 2013-03-12T20:39:01.510 に答える