public override void Process(TagHelperContext context, TagHelperOutput output) { if (CurrentPage == null) { output.Content.SetHtmlContent("Page object (sde-page) cannot be null"); return; } if (ModuleViewResults == null) { output.Content.SetHtmlContent("Module action results (sde-module-results) cannot be null"); return; } if (CurrentPage.Layout == null) { output.Content.SetHtmlContent("Layout is not configured, choose a layout"); return; } ((HtmlHelper)_htmlHelper).Contextualize(ViewContext); var pageLayout = new PageLayout { Name = CurrentPage.Layout.Name }; var properties = _propertyRepository.GetProperties(); pageLayout.PlaceHolders = JsonConvert.DeserializeObject <List <PlaceHolder> >(CurrentPage.Layout.Config); GetPropertyValue(pageLayout.PlaceHolders, properties); PageContents = _mapper.Map <ICollection <PageContent> >(CurrentPage.PageContent); //Copy property options from master data if (PageContents != null && PageContents.Count > 0) { foreach (var pageContent in PageContents) { if (pageContent.ContentType.Properties != null && pageContent.ContentType.Properties.Count > 0) { foreach (var prop in pageContent.ContentType.Properties) { var propValue = pageContent.Properties.FirstOrDefault(p => p.Id == prop.Id); if (propValue != null) { propValue.OptionListId = prop.OptionListId; propValue.OptionList = prop.OptionList; } } } } } if (pageLayout.PlaceHolders == null || pageLayout.PlaceHolders.Count <= 0) { return; } var result = RenderContentItems(pageLayout.PlaceHolders); if (ModuleViewResults.Count > 0) { //One or more modules are not added in containers foreach (var moduleViewResult in ModuleViewResults) { if (moduleViewResult.Value != null && moduleViewResult.Value.Count > 0) { foreach (var contentResult in moduleViewResult.Value) { //result += contentResult.HtmlResult; result.AppendHtml(contentResult.HtmlResult); } } } } output.Content.SetHtmlContent(result); //Release all resources pageLayout.RegisterForDispose(ViewContext.HttpContext); PageContents.GetEnumerator().RegisterForDispose(ViewContext.HttpContext); ModuleViewResults.GetEnumerator().RegisterForDispose(ViewContext.HttpContext); pageLayout.RegisterForDispose(ViewContext.HttpContext); }