0

I have a situation where I am using Gizmox VWG 6.4 and a HTML page to surface some D3js visualisations.

Currently I am generating the data with no problems. The end result is that I have a JSON object in the correct format for my D3js app. What I need to do is somehow host the HTML within Gizmox VWG (presumably via HtmlBox??), and then somehow make the JSON object available to the HtmlBox so the HTML/JS app can read that? Ideally without having to store the JSON on disk?

Any ideas if this is even possible??

Thanks.

Dav.id
  • 2,757
  • 3
  • 45
  • 57

1 Answers1

1

Sure this is possible using Visual WebGUi gateway to feed the HtmlBox. Say you have a Form with an HtmlBox, you can do the following:

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Web;

using Gizmox.WebGUI.Common;
using Gizmox.WebGUI.Common.Gateways;
using Gizmox.WebGUI.Forms;

namespace VisualWebGuiApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            NameValueCollection NVC = new NameValueCollection();
            NVC.Add("JsonParm1", "value1");
            NVC.Add("JsonParm2", "value2");
            this.htmlBox1.Url = (new GatewayReference(this, "generateJSON", NVC)).ToString();
        }

        protected override Gizmox.WebGUI.Common.Interfaces.IGatewayHandler ProcessGatewayRequest(Gizmox.WebGUI.Hosting.HostContext objHostContext, string strAction)
        {
            if (strAction == "generateJSON")
            {
                // make sure no caching takes place.
                objHostContext.Response.Expires = -1;
                objHostContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                objHostContext.Response.CacheControl = "no-cache";
                objHostContext.Response.AddHeader("Pragma", "no-cache");

                // Get the parameters from the gateway reference
                string strParm1 = objHostContext.Request["JsonParm1"].ToString();
                string strParm2 = objHostContext.Request["JsonParm2"].ToString();

                // build your output and set content type
                objHostContext.Response.ContentType = "text/html";
                objHostContext.Response.Write("the data you want to write");

                objHostContext.Response.Flush();
                return null;
            }
            else 
                return base.ProcessGatewayRequest(objHostContext, strAction);
        }
    }

}

Gateways are in fact a really powerful feature of VWG. See Here

Hope this helps, Palli

Palli
  • 191
  • 2
  • Hey thanks Pali, that looks like an excellent option! Just still a bit new to the more advanced bits of VWG, however I did "hack" a gateway option to auto-download a csv file a while back.. just didn't make the connection for this type of request. In fact my "poor" solution was to: this.htmlBox1.InvokeClientMethod("tfrJSON", JSONdata); which passed the JSON data through to a JS function called tfrJSON - in my case not so bad as the JSON is pretty small. However will give your solution a try for sure!! thanks again. – Dav.id Aug 15 '13 at 09:22