gpt4 book ai didi

asp.net-mvc - 在MVC中生成没有 Controller 的 View ?

转载 作者:行者123 更新时间:2023-12-05 00:28:04 27 4
gpt4 key购买 nike

我的应用程序分为三层:

  • 查看 (MVC)
  • 业务逻辑(服务)
  • 数据 (LINQ/SQL)

  • 在我的整个服务层,我调用了一个 EmailSender 服务,该服务当前通过 SmtpClient 和 MailMessage 发送纯文本电子邮件。据我所知,相当标准的东西。

    我现在正在尝试通过使用接受 MailMessage 作为模型的 Razor 模板来格式化这些电子邮件的正文,并生成一些我可以粘贴到邮件正文中的 HTML。

    现在这就是我所拥有的:
    public void SendAsyncEmail(MailMessage message)
    {
    message.IsBodyHtml = true;

    message.body = {generate html string from body here using razor?}

    // Async code here
    }

    假设我定义了这样的 Razor View :
    @model System.Net.Mail.MailMessage

    <div>
    <h1>@Model.Subject</h1>
    <p>@Model.Body</p>
    </div>

    如何从我的服务方法将 MailMessage 传递到此 View 并从中生成一个字符串作为电子邮件正文?

    最佳答案

    要渲染 View ,您需要使用 view engine和一个 view context . View 引擎负责查找和渲染 View 。 View 上下文包含有关 View 及其状态的信息。

    public ActionResult Index()
    {
    StringWriter sw = new StringWriter();
    ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, "Index", "_Layout");
    ViewContext context = new ViewContext(ControllerContext, result.View, ViewData, TempData, sw);
    result.View.Render(context, sw);
    result.ViewEngine.ReleaseView(ControllerContext, result.View);

    string viewString = sw.ToString();

    return Content(viewString);
    }

    要传递模型,请使用 ViewData (即可从 Controller 获得的属性)。
    ViewData.Model = new MailMessage();

    我也想 强烈推荐 PostalMvcMailer作为您当前方法的替代方案。它们的工作原理相同,即使用 View (例如 razor)生成电子邮件。设置非常简单,奖励是值得的。

    如果您的应用程序使用大量电子邮件,那么我建议您尝试使用它们。

    关于asp.net-mvc - 在MVC中生成没有 Controller 的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483114/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com