It appears I have been looking for the wrong thing - the secret phrase is:
Rendering razor view to a string
The code below works quite well it would seem:
public static string GetRazorViewAsString(object model, string filePath)
{
var st = new StringWriter();
var context = new HttpContextWrapper(HttpContext.Current);
var routeData = new RouteData();
var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
var razor = new RazorView(controllerContext, filePath, null, false, null);
razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
return st.ToString();
}
Code from http://forums.asp.net/post/5333141.aspx