From cc5ca0b5fe64ef21e9bdfdcc62745cd04cbfdf41 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 30 Jan 2013 09:21:43 -0100 Subject: [PATCH] Fixing U4-359 Previewing new nested pages doesn't work --- .../umbraco/preview/PreviewContent.cs | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs index 92f6203beb..38c376591d 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/preview/PreviewContent.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Data; using System.Configuration; +using System.Globalization; using System.Linq; using System.Web; using System.Web.Security; @@ -52,13 +54,30 @@ namespace umbraco.presentation.preview // clone xml XmlContent = (XmlDocument)content.Instance.XmlContent.Clone(); - // inject current document xml - int parentId = documentObject.Level == 1 ? -1 : documentObject.Parent.Id; - XmlContent = content.AppendDocumentXml(documentObject.Id, documentObject.Level, parentId, documentObject.ToPreviewXml(XmlContent), XmlContent); + var previewNodes = new List(); + + var parentId = documentObject.Level == 1 ? -1 : documentObject.Parent.Id; + + while (parentId > 0 && XmlContent.GetElementById(parentId.ToString(CultureInfo.InvariantCulture)) == null) + { + var document = new Document(parentId); + previewNodes.Insert(0, document); + parentId = document.ParentId; + } + + previewNodes.Add(documentObject); + + foreach (var document in previewNodes) + { + //Inject preview xml + parentId = document.Level == 1 ? -1 : document.Parent.Id; + var previewXml = document.ToPreviewXml(XmlContent); + content.AppendDocumentXml(document.Id, document.Level, parentId, previewXml, XmlContent); + } if (includeSubs) { - foreach (CMSPreviewNode prevNode in documentObject.GetNodesForPreview(true)) + foreach (var prevNode in documentObject.GetNodesForPreview(true)) { XmlContent = content.AppendDocumentXml(prevNode.NodeId, prevNode.Level, prevNode.ParentId, XmlContent.ReadNode(XmlReader.Create(new StringReader(prevNode.Xml))), XmlContent); }