【问题标题】:Creating ASP.NET MVC style views in a console application?在控制台应用程序中创建 ASP.NET MVC 样式视图?
【发布时间】:2010-10-19 16:03:43
【问题描述】:

我有一个控制台应用程序,需要我发送电子邮件。现在我使用字符串生成器来创建电子邮件,但我想变得更花哨。然后我恍然大悟:最好将我的对象发送到 ASP.NET MVC 样式视图,在其中我有 HTML 标记,然后将其返回以邮寄出去。现在,我的情况是;

    private void MailJobList(List<Job> newJobs) {
                var body = new System.Text.StringBuilder();
                var from = new MailAddress("daemon@mydomain.com");
                var to = new MailAddress(addresslist.Get());

                var message = new MailMessage(from, to);

                message.Subject = "New job list";

    //mail settings ommitted here for brevity

                body.Append("New jobs: ");
                if (newJobs.Any()) {
                    foreach (var newJob in newJobs) {
                        body.Append(newJob.Job + ", ");
                    }
                }

                message.Body = body.ToString();

                client.Send(message);
}

显然这只是纯文本,但我真的很想能够做这样的事情:

var body = RenderHTMLMessage(newJobs);

似乎我应该能够利用 ASP.NET MVC 的视图引擎(或 Spark 或任何其他视图引擎)而不是自己动手。如果我在这里不符合要求或有任何更简单的方法可以做到这一点,我愿意接受建议。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-2 viewengine


【解决方案1】:

您可以在控制台应用程序中使用新的Razor 视图引擎,请参阅以下博客文章:

http://thegsharp.wordpress.com/2010/07/07/using-razor-from-a-console-application/

【讨论】:

【解决方案2】:

您可以将Spark View Engine 用作general purpose templating engine。 Spark 的创建者写了一篇关于如何去做的博文(这将是一个好的开始)。

【讨论】:

  • 谢谢,我不敢相信我错过了。 Spark 看起来比 Razor 更容易设置和用作独立的模板解决方案。这在未来可能会改变,但这肯定会更加成熟。
【解决方案3】:

您可以使用T4 templates,其语法类似于asp.net,来执行此操作。不过,它需要 VS2010 附带的 T4 版本。 Here 是一个例子,here 是 msdn 的主题

【讨论】:

    【解决方案4】:

    这里的问题是 ASP.NET MVC 严重依赖于 ASP.NET,而 ASP.NET 依赖于网络服务器。我认为这不是你想要的方式。您可以做的是自己托管 ASP.NET,然后向自己发送虚假请求。

    【讨论】:

      【解决方案5】:

      MVC 基础架构对于这项任务来说太重了。除非您编写/托管一个 MVC 应用程序来创建页面,然后在发送电子邮件之前直接从 URL 读取 html(这也可能意味着(在浏览器中查看)链接已经创建(如果将其用于 newletters。

      对于特定的电子邮件,创建包含所有 html(以及电子邮件所需的内联样式)的 html 模板文件,然后读入 html 并替换标记,例如 ##TO_NAME## 等标记或列表(写出的行)无论如何,每个人都会有非常具体的代码。

      这意味着您可以将电子邮件模板单独更改为代码并通过不从电子邮件模板中删除令牌来省略内容。

      例如:

      <html>
      <body style="font-size:10px">
      Dear ##To_NAME##< /br>
      </br>
      Your Jobs< /br>
        <table>
            <tr>
               <td colspan="2">New Jobs<td>
            </tr>
            ##JOB_LIST##
        <table>
        ##FROM_NAME##
      </body>
      </html>
      

      【讨论】:

      • 这种方法的主要缺点是视图引擎已经在语法中包含了循环和条件等概念。因此,您可以“绑定”到代表工作列表的 CLR 对象的列表列表,并在您的视图中指定要使用的标记。您的方法看起来需要在代码中生成一些 HTML 标记,这会在电子邮件布局和用于填充数据的代码之间创建相当强的耦合。
      • 是的,它确实需要生成一些 html,它只是 OP 现在所做的改进版本。
      【解决方案6】:

      试试 DotLiquid (www.dotliquidmarkup.org)。它是一个模板引擎,可用于各种应用程序,语法简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-29
        • 2012-01-18
        • 1970-01-01
        • 2017-09-10
        • 1970-01-01
        • 2012-04-08
        • 2011-09-11
        • 1970-01-01
        相关资源
        最近更新 更多