private string AppendHtmlWithChildRegionContens(string html, PageContentProjection projection, RenderPageViewModel pageModel) { // Render contents from children regions var childRegionContents = projection.GetChildRegionContentProjections() ?? new List <PageContentProjection>(); if (projection.Content is IChildRegionContainer && projection.Content.ContentRegions != null && projection.Content.ContentRegions.Any()) { var stringBuilder = new StringBuilder(html); var pageHtmlHelper = new PageHtmlRenderer(stringBuilder, pageModel); foreach (var region in projection.Content.ContentRegions.Distinct()) { var contentsBuilder = new StringBuilder(); var regionModel = new PageRegionViewModel { RegionId = region.Region.Id, RegionIdentifier = region.Region.RegionIdentifier }; var childRegionContentProjections = childRegionContents.Where(c => c.RegionId == regionModel.RegionId).OrderBy(c => c.Order).ToList(); var canEditRegion = projection.PageId == pageModel.Id && pageModel.AreRegionsEditable; using (new LayoutRegionWrapper(contentsBuilder, regionModel, canEditRegion)) { foreach (var childRegionContentProjection in childRegionContentProjections) { // Add Html using (new RegionContentWrapper(contentsBuilder, childRegionContentProjection, pageModel.CanManageContent && canEditRegion)) { // Pass current model as view data model var modelBefore = htmlHelper.ViewData.Model; htmlHelper.ViewData.Model = pageModel; contentsBuilder = AppendHtml(contentsBuilder, childRegionContentProjection, pageModel); // Restore model, which was before changes htmlHelper.ViewData.Model = modelBefore; } } } // Insert region to master page var regionHtml = contentsBuilder.ToString(); pageHtmlHelper.ReplaceRegionHtml(regionModel.RegionIdentifier, regionHtml); } return(pageHtmlHelper.GetReplacedHtml().ToString()); } return(html); }
/// <summary> /// Gets the replaced HTML. /// </summary> /// <returns>HTML with replaced view model values</returns> private string GetReplacedHtml(string html, RenderPageViewModel model) { var helper = new PageHtmlRenderer(new StringBuilder(html), model); return helper.GetReplacedHtml().ToString(); }
private string AppendHtmlWithChildRegionContens(string html, PageContentProjection projection, RenderPageViewModel pageModel) { // Render contents from children regions var childRegionContents = projection.GetChildRegionContentProjections() ?? new List<PageContentProjection>(); if (projection.Content is IChildRegionContainer && projection.Content.ContentRegions != null && projection.Content.ContentRegions.Any()) { var stringBuilder = new StringBuilder(html); var pageHtmlHelper = new PageHtmlRenderer(stringBuilder, pageModel); foreach (var region in projection.Content.ContentRegions.Distinct()) { var contentsBuilder = new StringBuilder(); var regionModel = new PageRegionViewModel { RegionId = region.Region.Id, RegionIdentifier = region.Region.RegionIdentifier }; var childRegionContentProjections = childRegionContents.Where(c => c.RegionId == regionModel.RegionId).OrderBy(c => c.Order).ToList(); var canEditRegion = projection.PageId == pageModel.Id && pageModel.AreRegionsEditable; using (new LayoutRegionWrapper(contentsBuilder, regionModel, canEditRegion)) { foreach (var childRegionContentProjection in childRegionContentProjections) { // Add Html using (new RegionContentWrapper(contentsBuilder, childRegionContentProjection, pageModel.CanManageContent && canEditRegion)) { // Pass current model as view data model var modelBefore = htmlHelper.ViewData.Model; htmlHelper.ViewData.Model = pageModel; contentsBuilder = AppendHtml(contentsBuilder, childRegionContentProjection, pageModel); // Restore model, which was before changes htmlHelper.ViewData.Model = modelBefore; } } } // Insert region to master page var regionHtml = contentsBuilder.ToString(); pageHtmlHelper.ReplaceRegionHtml(regionModel.RegionIdentifier, regionHtml); } return pageHtmlHelper.GetReplacedHtml().ToString(); } return html; }