/// <summary> /// Includes the template with the specified key /// </summary> /// <param name="key">Key used to resolve a template</param> /// <param name="model">Template model</param> public async Task IncludeAsync(string key, object model = null) { if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException(nameof(key)); } if (this.PageLookup == null) { throw new RazorLightException("Can't locate a page as PageLookup is not set"); } PageLookupResult pageResult = PageLookup.GetPage(key); if (pageResult.Success) { TemplatePage page = pageResult.ViewEntry.PageFactory(); page.PageContext = new PageContext(this.PageContext.ViewBag) { Writer = this.PageContext.Writer }; if (model != null) { var modelTypeInfo = new ModelTypeInfo(model.GetType()); page.PageContext.ModelTypeInfo = modelTypeInfo; object pageModel = modelTypeInfo.CreateTemplateModel(model); page.SetModel(pageModel); } await page.ExecuteAsync(); } }
/// <summary> /// Runs a template, renders a Layout pages and sections. /// </summary> /// <param name="page">Page to run</param> /// <param name="model">Mode of the page</param> public string RunTemplate(TemplatePage page, object model) { object pageModel = page.PageContext.ModelTypeInfo.CreateTemplateModel(model); page.SetModel(pageModel); page.Path = page.PageContext.ExecutingFilePath; using (var writer = new StringWriter()) { page.PageContext.Writer = writer; using (var renderer = new PageRenderer(page, pageLookup)) { renderer.ViewStartPages.AddRange(page.PageContext.ViewStartPages); renderer.PreRenderCallbacks.AddRange(Configuration.PreRenderCallbacks); renderer.RenderAsync(page.PageContext).GetAwaiter().GetResult(); return(writer.ToString()); } } }