Inheritance: MonoBehaviour
    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;
      }
    }