public string Render() { var fileName = FileUtil.MapPath(Path.Combine(TempFolder, this.FiddleId)); FileUtil.CreateFolder(Path.GetDirectoryName(fileName)); var viewFileName = Path.ChangeExtension(fileName, ".cshtml"); File.WriteAllText(viewFileName, this.View, Encoding.UTF8); var codeFileName = Path.ChangeExtension(fileName, ".js"); if (!string.IsNullOrWhiteSpace(this.Code)) { this.WriteCode(codeFileName); } else if (File.Exists(codeFileName)) { File.Delete(codeFileName); } try { if (string.IsNullOrEmpty(this.Renderings)) { throw new InvalidOperationException("The Layout Renderings field must be a well-formed XML document."); } XDocument doc; try { doc = XDocument.Parse(this.Renderings); } catch { throw new InvalidOperationException("The Layout Renderings field is not well-formed."); } var root = doc.Root; if (root == null) { throw new InvalidOperationException("The Layout Renderings field is not well-formed."); } var fiddleRendering = this.CreateFiddleRendering(); try { this.CreateItems(fiddleRendering, root, FileUtil.UnmapPath(viewFileName, false)); var child = fiddleRendering.Children.FirstOrDefault() ?? Context.Item; var renderings = this.ParseLayout(root, fiddleRendering); var itemRenderer = new ItemRenderer(renderings, "/") { UsePlaceholders = true }; using (new ContextItemSwitcher(child)) { return itemRenderer.Render(); } } finally { fiddleRendering.Delete(); } } catch (Exception ex) { var text = string.Empty; while (ex != null) { text += "<p>" + ex.Message + "</p>"; ex = ex.InnerException; } WebUtil.SetSessionValue("SC_FIDDLE_ERROR", text); HttpContext.Current.Response.Redirect("/sitecore/client/Reference/Fiddle/FiddleError"); return string.Empty; } }