Creating ASP.NET MVC style views in a console application?
I have a console application that requires me to send out e-mails. Right now I use a string builder to create the e-mails, but I'd like to get more fancy. Then it dawned on me: it would be nice to send my object to an ASP.NET MVC style view, where I'd have the HTML markup, and then return it to mail out. Right now, I have it going as;
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
开发者_C百科 body.Append("New jobs: ");
if (newJobs.Any()) {
foreach (var newJob in newJobs) {
body.Append(newJob.Job + ", ");
}
}
message.Body = body.ToString();
client.Send(message);
}
Obviously that's just plain text, but I'd really like to be able to do something like:
var body = RenderHTMLMessage(newJobs);
It seems like I should be able to leverage ASP.NET MVC's view engine (or Spark or any other view engine) and not roll my own. If I'm off mark here or there's any easier way to do this, I'm open to suggestions.
You can use the new Razor view engine in a console app, see the following blog post:
http://thegsharp.wordpress.com/2010/07/07/using-razor-from-a-console-application/
You can use the Spark View Engine as a general purpose templating engine. The creator of Spark wrote a blogpost on how to go about doing it (would be a good start).
You can use T4 templates, which have a syntax similar to asp.net, to do this. It requires the T4 version that ships with VS2010, though. Here is an example, and here is msdn on the subject
The problem here is that ASP.NET MVC relies heavily on ASP.NET, and ASP.NET relies on a webserver.. I don't think it's doable the way you want to. What you could do is to host ASP.NET yourself, and fake requests to yourself.
The MVC infrastructure would be too heavy for this task. unless you write/host an MVC application to create the pages then read html directly from the URL before emailing (this could also mean that the (view this in the browser) link is already created (if using this for newletters.
For specific emails, create html template files that contain all the html (and inline styles required by emails), then reads in the html and replace the tokens eg ##TO_NAME## etc The tokens or lists (written out rows) will be pretty specific code to each one anyway.
This means you can change the email templates separatly to the code and ommit content by not removing the tokens from in the email template.
eg:
<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>
Give a try to DotLiquid (www.dotliquidmarkup.org). It's a templating engine that can be used in every kind of application, with an easy syntax.
精彩评论