From 480f73dba743fe4fde8322289ee51e110514c111 Mon Sep 17 00:00:00 2001 From: Casey Neehouse Date: Sun, 19 Aug 2012 09:26:13 +0400 Subject: [PATCH 1/2] Corrections to RenderTemlate(pageId) method to reset context and remove altTemplate from the rendering page. --- src/Umbraco.Web/umbraco.presentation/library.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/library.cs b/src/Umbraco.Web/umbraco.presentation/library.cs index c678073c64..a082213a6e 100644 --- a/src/Umbraco.Web/umbraco.presentation/library.cs +++ b/src/Umbraco.Web/umbraco.presentation/library.cs @@ -1233,10 +1233,10 @@ namespace umbraco { if (UmbracoSettings.UseAspNetMasterPages) { - System.Collections.Generic.Dictionary items = getCurrentContextItems(); - if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) { + System.Collections.Generic.Dictionary items = getCurrentContextItems(); + HttpContext Context = HttpContext.Current; StringBuilder queryString = new StringBuilder(); const string ONE_QS_PARAM = "&{0}={1}"; @@ -1256,6 +1256,7 @@ namespace umbraco updateLocalContextItems(items, Context); return sw.ToString(); + } else { @@ -1315,12 +1316,14 @@ namespace umbraco { if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) { + System.Collections.Generic.Dictionary items = getCurrentContextItems(); + HttpContext Context = HttpContext.Current; StringBuilder queryString = new StringBuilder(); const string ONE_QS_PARAM = "&{0}={1}"; foreach (object key in Context.Request.QueryString.Keys) { - if (!key.ToString().ToLower().Equals("umbpageid")) + if (!key.ToString().ToLower().Equals("umbpageid") && !key.ToString().ToLower().Equals("alttemplate")) queryString.Append(string.Format(ONE_QS_PARAM, key, Context.Request.QueryString[key.ToString()])); } StringWriter sw = new StringWriter(); @@ -1328,6 +1331,9 @@ namespace umbraco Context.Server.Execute( string.Format("/default.aspx?umbPageID={0}{1}", PageId, queryString), sw); + + // update the local page items again + updateLocalContextItems(items, Context); return sw.ToString(); } From 3180b5c5b61e24205c055d18f87340dc08e5bbe1 Mon Sep 17 00:00:00 2001 From: Casey Neehouse Date: Sun, 19 Aug 2012 11:25:44 +0400 Subject: [PATCH 2/2] Additional RenderTemplate modification to reset context in error situations. --- .../umbraco.presentation/library.cs | 123 +++++++++--------- 1 file changed, 61 insertions(+), 62 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/library.cs b/src/Umbraco.Web/umbraco.presentation/library.cs index a082213a6e..a85cee77a6 100644 --- a/src/Umbraco.Web/umbraco.presentation/library.cs +++ b/src/Umbraco.Web/umbraco.presentation/library.cs @@ -1229,55 +1229,56 @@ namespace umbraco /// The rendered template as a string public static string RenderTemplate(int PageId, int TemplateId) { - try + if (UmbracoSettings.UseAspNetMasterPages) { - if (UmbracoSettings.UseAspNetMasterPages) + if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) { - if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) + System.Collections.Generic.Dictionary items = getCurrentContextItems(); + HttpContext.Current.Items["altTemplate"] = null; + + HttpContext Context = HttpContext.Current; + StringBuilder queryString = new StringBuilder(); + const string ONE_QS_PARAM = "&{0}={1}"; + foreach (object key in Context.Request.QueryString.Keys) { - System.Collections.Generic.Dictionary items = getCurrentContextItems(); - - HttpContext Context = HttpContext.Current; - StringBuilder queryString = new StringBuilder(); - const string ONE_QS_PARAM = "&{0}={1}"; - foreach (object key in Context.Request.QueryString.Keys) - { - if (!key.ToString().ToLower().Equals("umbpageid") && !key.ToString().ToLower().Equals("alttemplate")) - queryString.Append(string.Format(ONE_QS_PARAM, key, Context.Request.QueryString[key.ToString()])); - } - StringWriter sw = new StringWriter(); - + if (!key.ToString().ToLower().Equals("umbpageid") && !key.ToString().ToLower().Equals("alttemplate")) + queryString.Append(string.Format(ONE_QS_PARAM, key, Context.Request.QueryString[key.ToString()])); + } + StringWriter sw = new StringWriter(); + try + { Context.Server.Execute( string.Format("~/default.aspx?umbPageID={0}&alttemplate={1}{2}", PageId, new template(TemplateId).TemplateAlias, queryString), sw); - // update the local page items again - updateLocalContextItems(items, Context); - - return sw.ToString(); - } - else + catch (Exception ee) { - return "RenderTemplate not supported in Canvas"; + sw.Write("", ee); } + + // update the local page items again + updateLocalContextItems(items, Context); + + return sw.ToString(); + } else { - page p = new page(((IHasXmlNode)GetXmlNodeById(PageId.ToString()).Current).GetNode()); - p.RenderPage(TemplateId); - Control c = p.PageContentControl; - StringWriter sw = new StringWriter(); - HtmlTextWriter hw = new HtmlTextWriter(sw); - c.RenderControl(hw); - - return sw.ToString(); + return "RenderTemplate not supported in Canvas"; } } - catch (Exception ee) + else { - return string.Format("", ee); + page p = new page(((IHasXmlNode)GetXmlNodeById(PageId.ToString()).Current).GetNode()); + p.RenderPage(TemplateId); + Control c = p.PageContentControl; + StringWriter sw = new StringWriter(); + HtmlTextWriter hw = new HtmlTextWriter(sw); + c.RenderControl(hw); + + return sw.ToString(); } } @@ -1310,48 +1311,46 @@ namespace umbraco /// The rendered template as a string. public static string RenderTemplate(int PageId) { - try + if (UmbracoSettings.UseAspNetMasterPages) { - if (UmbracoSettings.UseAspNetMasterPages) + if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) { - if (!umbraco.presentation.UmbracoContext.Current.LiveEditingContext.Enabled) + System.Collections.Generic.Dictionary items = getCurrentContextItems(); + HttpContext.Current.Items["altTemplate"] = null; + + HttpContext Context = HttpContext.Current; + StringBuilder queryString = new StringBuilder(); + const string ONE_QS_PARAM = "&{0}={1}"; + foreach (object key in Context.Request.QueryString.Keys) { - System.Collections.Generic.Dictionary items = getCurrentContextItems(); - - HttpContext Context = HttpContext.Current; - StringBuilder queryString = new StringBuilder(); - const string ONE_QS_PARAM = "&{0}={1}"; - foreach (object key in Context.Request.QueryString.Keys) - { - if (!key.ToString().ToLower().Equals("umbpageid") && !key.ToString().ToLower().Equals("alttemplate")) - queryString.Append(string.Format(ONE_QS_PARAM, key, Context.Request.QueryString[key.ToString()])); - } - StringWriter sw = new StringWriter(); - - Context.Server.Execute( - string.Format("/default.aspx?umbPageID={0}{1}", - PageId, queryString), sw); - - // update the local page items again - updateLocalContextItems(items, Context); - - return sw.ToString(); + if (!key.ToString().ToLower().Equals("umbpageid") && !key.ToString().ToLower().Equals("alttemplate")) + queryString.Append(string.Format(ONE_QS_PARAM, key, Context.Request.QueryString[key.ToString()])); } - else + StringWriter sw = new StringWriter(); + try { - return "RenderTemplate not supported in Canvas"; + Context.Server.Execute(string.Format("/default.aspx?umbPageID={0}{1}", PageId, queryString), sw); } + catch (Exception ee) + { + sw.Write("", ee); + } + + // update the local page items again + updateLocalContextItems(items, Context); + + return sw.ToString(); } else { - return - RenderTemplate(PageId, - new page(((IHasXmlNode)GetXmlNodeById(PageId.ToString()).Current).GetNode()).Template); + return "RenderTemplate not supported in Canvas"; } } - catch (Exception ee) + else { - return string.Format("", ee); + return + RenderTemplate(PageId, + new page(((IHasXmlNode)GetXmlNodeById(PageId.ToString()).Current).GetNode()).Template); } }