public string RenderLayout(RazorEngineCompiledTemplate <LayoutTemplateBase> compiledLayout, object model) { return(compiledLayout.Run(instance => { if (!(model is AnonymousTypeWrapper)) { model = new AnonymousTypeWrapper(model); } instance.Model = model; })); }
public RenderedTemplate Render(RazorEngineCompiledTemplate <IncludeTemplateBase> compiledTemplate, IDictionary <string, RazorEngineCompiledTemplate <IncludeTemplateBase> > compiledIncludes, object model) { List <string> usedIncludes = new List <string>(); string templateLayout = string.Empty; Dictionary <string, dynamic> templateViewData = new Dictionary <string, dynamic>(); string templateOutput = compiledTemplate.Run(instance => { if (!(model is AnonymousTypeWrapper)) { model = new AnonymousTypeWrapper(model); } instance.Model = model; instance.IncludeCallback = (key, includeModel) => { usedIncludes.Add(key); RenderedTemplate renderedTemplate = Render(compiledIncludes[key], compiledIncludes, includeModel); renderedTemplate.ViewData.ToList().ForEach(item => { templateViewData[item.Key] = item.Value; }); return(renderedTemplate.HtmlContents); }; instance.LayoutCallback = key => { templateLayout = key; }; instance.ViewData.Callback = newViewData => { templateViewData = newViewData; }; }); return(new RenderedTemplate { HtmlContents = templateOutput, ComponentDependencies = usedIncludes, Layout = templateLayout, ViewData = templateViewData }); }