如何将Razor视图转换为字符串?

Vla*_*žić 13 .net c# asp.net-mvc razor asp.net-mvc-3

我想将我的Razor视图用作发送电子邮件的某种模板,因此我想在视图中"保存"我的模板,将其作为字符串读入控制器,执行一些必要的替换,然后发送它.

我有适用的解决方案:我的模板作为HTML页面托管在某处,但我想把它放到我的应用程序中(即在我的视图中).我不知道如何在我的控制器中读取视图作为字符串.

mat*_*mmo 18

我使用以下内容.如果您有基础控制器,请将其放在基础控制器上,这样您就可以在所有控制器中访问它.

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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Gar*_*ger 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);
Run Code Online (Sandbox Code Playgroud)