diff --git a/src/Umbraco.Web/umbraco.presentation/macro.cs b/src/Umbraco.Web/umbraco.presentation/macro.cs
index 80fe808478..8ff8ebffd6 100644
--- a/src/Umbraco.Web/umbraco.presentation/macro.cs
+++ b/src/Umbraco.Web/umbraco.presentation/macro.cs
@@ -469,7 +469,7 @@ namespace umbraco
break;
}
case (int)MacroTypes.XSLT:
- macroControl = loadMacroXSLT(this, Model, pageElements);
+ macroControl = LoadMacroXslt(this, Model, pageElements, true);
break;
case (int)MacroTypes.Script:
@@ -774,21 +774,20 @@ namespace umbraco
return retval;
}
- public Control loadMacroXSLT(macro macro, MacroModel model, Hashtable pageElements)
+ internal Control LoadMacroXslt(macro macro, MacroModel model, Hashtable pageElements, bool throwError)
{
if (XsltFile.Trim() != string.Empty)
{
// Get main XML
- XmlDocument umbracoXML = content.Instance.XmlContent;
+ var umbracoXml = content.Instance.XmlContent;
// Create XML document for Macro
- var macroXML = new XmlDocument();
- macroXML.LoadXml("");
+ var macroXml = new XmlDocument();
+ macroXml.LoadXml("");
- foreach (MacroPropertyModel prop in macro.Model.Properties)
+ foreach (var prop in macro.Model.Properties)
{
- addMacroXmlNode(umbracoXML, macroXML, prop.Key, prop.Type,
- prop.Value);
+ addMacroXmlNode(umbracoXml, macroXml, prop.Key, prop.Type, prop.Value);
}
if (HttpContext.Current.Request.QueryString["umbDebug"] != null && GlobalSettings.DebugMode)
@@ -796,7 +795,7 @@ namespace umbraco
return
new LiteralControl("
Debug from " +
macro.Name +
- "" + HttpContext.Current.Server.HtmlEncode(macroXML.OuterXml) +
+ "
" + HttpContext.Current.Server.HtmlEncode(macroXml.OuterXml) +
"
");
}
@@ -806,7 +805,7 @@ namespace umbraco
try
{
- Control result = CreateControlsFromText(GetXsltTransformResult(macroXML, xsltFile));
+ var result = CreateControlsFromText(GetXsltTransformResult(macroXml, xsltFile));
TraceInfo("umbracoMacro", "After performing transformation");
@@ -824,18 +823,32 @@ namespace umbraco
ie = ie.InnerException;
}
- var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
- return GetControlForErrorBehavior("Error parsing XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
+ var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
+ var macroControl = GetControlForErrorBehavior("Error parsing XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
+ //if it is null, then we are supposed to throw the (original) exception
+ // see: http://issues.umbraco.org/issue/U4-497 at the end
+ if (macroControl == null && throwError)
+ {
+ throw;
+ }
+ return macroControl;
}
}
catch (Exception e)
{
Exceptions.Add(e);
LogHelper.WarnWithException("Error loading XSLT " + Model.Xslt, true, e);
-
+
// Invoke any error handlers for this macro
- var macroErrorEventArgs = new MacroErrorEventArgs {Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour};
- return GetControlForErrorBehavior("Error reading XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
+ var macroErrorEventArgs = new MacroErrorEventArgs { Name = Model.Name, Alias = Model.Alias, ItemKey = Model.Xslt, Exception = e, Behaviour = UmbracoSettings.MacroErrorBehaviour };
+ var macroControl = GetControlForErrorBehavior("Error reading XSLT file: \\xslt\\" + XsltFile, macroErrorEventArgs);
+ //if it is null, then we are supposed to throw the (original) exception
+ // see: http://issues.umbraco.org/issue/U4-497 at the end
+ if (macroControl == null && throwError)
+ {
+ throw;
+ }
+ return macroControl;
}
}
@@ -843,6 +856,11 @@ namespace umbraco
return new LiteralControl(string.Empty);
}
+ public Control loadMacroXSLT(macro macro, MacroModel model, Hashtable pageElements)
+ {
+ return LoadMacroXslt(macro, model, pageElements, false);
+ }
+
///
/// Parses the text for umbraco Item controls that need to be rendered.
///