///// <summary> ///// Renders a Partial View Macro ///// </summary> ///// <param name="macro"></param> ///// <param name="nodeId"></param> ///// <returns></returns> //internal ScriptingMacroResult LoadPartialViewMacro(MacroModel macro, int nodeId) //{ // var retVal = new ScriptingMacroResult(); // TraceInfo("umbracoMacro", "Rendering Partial View Macro"); // var engine = MacroEngineFactory.GetEngine("Partial View Macro Engine");//PartialViewMacroEngine.EngineName); // var ret = engine.Execute(macro, new Node(nodeId)); // // if the macro engine supports success reporting and executing failed, then return an empty control so it's not cached // if (engine is IMacroEngineResultStatus) // { // var result = engine as IMacroEngineResultStatus; // if (!result.Success) // { // retVal.ResultException = result.ResultException; // } // } // TraceInfo("umbracoMacro", "Rendering Partial View Macro [done]"); // retVal.Result = ret; // return retVal; //} public ScriptingMacroResult LoadMacroScript(MacroModel macro, int currentPageId) { Log.Instance.LogDebug("LoadMacroScript macro.Alias: " + macro.Alias); Log.Instance.LogDebug("LoadMacroScript macro.ScriptCode: " + macro.ScriptCode); Log.Instance.LogDebug("LoadMacroScript macro.ScriptName: " + macro.ScriptName); var retVal = new ScriptingMacroResult(); TraceInfo("umbracoMacro", "Loading IMacroEngine script"); string ret; IMacroEngine engine; if (!string.IsNullOrEmpty(macro.ScriptCode)) { Log.Instance.LogDebug("LoadMacroScript engine.ScriptLanguage: " + macro.ScriptLanguage); engine = MacroEngineFactory.GetByExtension(macro.ScriptLanguage); Log.Instance.LogDebug("LoadMacroScript engine.Name: " + engine.Name); ret = engine.Execute(macro, new Node(currentPageId)); } else { var path = macro.ScriptName; if (!macro.ScriptName.StartsWith("~")) { path = SystemDirectories.MacroScripts.TrimEnd('/') + "/" + macro.ScriptName.TrimStart('/'); } Log.Instance.LogDebug("LoadMacroScript path: " + path); engine = MacroEngineFactory.GetByFilename(path); Log.Instance.LogDebug("LoadMacroScript engine.Name: " + engine.Name); ret = engine.Execute(macro, new Node(currentPageId)); } // if the macro engine supports success reporting and executing failed, then return an empty control so it's not cached if (engine is IMacroEngineResultStatus) { var result = engine as IMacroEngineResultStatus; if (!result.Success) { retVal.ResultException = result.ResultException; } } TraceInfo("umbracoMacro", "Loading IMacroEngine script [done]"); retVal.Result = ret; return(retVal); }
// copied and adapted from Umbraco's code to execute partial view macros private static ScriptingMacroResult LoadPartialViewMacro(MacroModel macro, IPublishedContent content) { var result = new ScriptingMacroResult(); var engine = MacroEngineFactory.GetEngine(PartialViewMacroEngine.EngineName) as PartialViewMacroEngine; if (engine == null) { throw new Exception("Oops."); } result.Result = engine.Execute(macro, content); // don't bother - only the legacy razor engine seems to implement that interface //var reportingEngine = engine as IMacroEngineResultStatus; //if (reportingEngine != null) //{ // if (reportingEngine.Success == false) // result.ResultException = reportingEngine.ResultException; //} return(result); }