他们的解决方案是使用 ASP.NET MVC View 生成电子邮件模板,而无需费力。
让我详细说明跳圈。
var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse);
var oldContext = HttpContext.Current;
HttpContext.Current = fakeContext;
var html = new HtmlHelper(new ViewContext(fakeControllerContext,
new FakeView(), viewDataDictionary, new TempDataDictionary()),
new ViewPage());
html.RenderPartial(viewName, viewData, viewDataDictionary);
HttpContext.Current = oldContext;
上面的代码是使用当前的 HttpContext 来伪造一个新的 Context 并使用 RenderPartial 渲染页面,我们不应该这样做。
另一个使用 ControllerContext 和 .Render 的非常详细的解决方案: ( IEmailTemplateService, Headers/Postback WorkAround ) 但几乎用更多的代码做同样的事情。
另一方面,我正在寻找一种无需 POST/GET 即可呈现 View 并生成一个简单字符串的东西,我可以通过我的电子邮件代码发送该字符串。 不会遇到错误的事情,例如两次发布标题或伪造一些数据。
例子:
//code which does not fire Render, RenderPartial... etc
var email = emailFramework.Create(viewData, view);
查看下面我的解决方案或点击此链接:
我使用 spark 的解决方案:(12/30/2009) ASP.NET MVC Email Template Solution
最佳答案
这是我想要 ASP.NET MVC ViewEngine 做的,但它在 Spark 中,只需点击下面的最新链接,
更新 (12/30/2009) 清洁版: ASP.NET MVC Email Template Solution
(11/16/2009) 或者,Louis DeJardin 控制台应用程序版本:
using System;
using Spark;
using Spark.FileSystem;
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class EmailView : AbstractSparkView
{
public User user { get; set; }
}
class Program
{
static void Main(string[] args)
{
// following are one-time steps
// create engine
var settings = new SparkSettings()
.SetPageBaseType(typeof(EmailView));
var templates = new InMemoryViewFolder();
var engine = new SparkViewEngine(settings)
{
ViewFolder = templates
};
// add templates
templates.Add("sample.spark", @"Dear ${user.Name}, This is an email.Sincerely, Spark View Engine http://constanto.org/unsubscribe/${user.Id}");
// following are per-render steps
// render template
var descriptor = new SparkViewDescriptor()
.AddTemplate("sample.spark");
var view = (EmailView)engine.CreateInstance(descriptor);
view.user = new User { Id = 655321, Name = "Alex" };
view.RenderView(Console.Out);
Console.ReadLine();
}
}
我决定使用这种方法,因为它似乎是正确的方法,它:
- 不使用任何 HttpContext/ControllerContext 或弄乱路由数据!
- 它可以实现页眉/页脚以允许模板!
- 您可以使用循环、条件等...
- 它干净、重量轻,特别是如果您打算完全迁移到 Spark View 引擎!
请务必阅读这些帖子。 Louis DeJardin 的全部功劳请参阅他的教程 :) Using Spark as a general purpose template engine! , Email Templates Revisited
关于c# - ASP.NET MVC 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730134/