【问题标题】:How do you convert a Razor view to a string?如何将 Razor 视图转换为字符串?
【发布时间】:2013-02-28 13:47:42
【问题描述】:

我想使用我的 Razor 视图作为某种模板来发送电子邮件, 所以我想将我的模板“保存”在视图中,将其作为字符串读入控制器,进行一些必要的替换,然后发送。

我有一个可行的解决方案:我的模板作为 HTML 页面托管在某处,但我想将它放入我的应用程序中(即在我看来)。我不知道如何在控制器中将视图读取为字符串。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    我使用以下内容。如果有的话,把它放在你的基本控制器上,这样你就可以在所有控制器中访问它。

    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();
        }
    }
    

    【讨论】:

    • 最近写了一些非常相似的东西。一美元的痛苦
    • @DaveA 呵呵是的,真的很痛苦,应该更容易。
    • 如何使用 .NET CORE 做同样的事情?
    【解决方案2】:

    看看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);
    

    【讨论】:

    • 这很有用,但我已经编写了一些我不想更改的代码。我只想将我的模板(html)保存在视图中,并从视图中读取 html 作为字符串,并在控制器中进行替换。
    • 明白。我已经完成了你过去所做的事情。但是,一旦我发现了 RazorEngine 库,我发现它不仅使开发模板解析变得更加容易,而且使维护模板变得更加简单。您可以将模板存储在数据库中或无需编辑代码即可对其进行编辑的位置。
    • 是否可以使用Microsoft.AspNet.Razor 做类似的事情?只是想在微软内部解决问题,这样我就不必证明另一个依赖是合理的。
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2016-09-06
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多