求高手帮帮我吧,在线等!!!
问题是这样的:我使用的是OFC1.0的控件,在测试的时候一切都正常,部署到服务器上以后,控件就显示不出来了,在网上也找了很多资料,也都试过了,比如添加MIME或去掉页面输出的绶存,可还是不行,求高手指点一下。
现在的问题是:要么不显示,要么显示“Open Flash ChartJSON Parse Error [Syntax Error]
Error at character 4, line 3:0: 
1: 
2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3”
请各位用过OFC的高手帮帮我吧!!!!!!!!!!!!
========================代码如下==========================
流程如下:
第一步:      
housedetails.aspx 这个页面内放了一个类似于TAB的标签,和一个iframe。
      页面代码如下:
      <ul id="ofcli">
       <li id='ofc1' class='leftb1a' onclick=setTab(ofc1,'ofc',1)>多层</li>
       <li id='ofc2' onclick=setTab(ofc2,'ofc',2)>高层</li>
       <li id='ofc3' onclick=setTab(ofc3,'ofc',3)>小高层</li>
       <li id='ofc4' onclick=setTab(ofc4,'ofc',4)>商业</li>
      </ul>
       
      //ofc控件输出页面
       <iframe id="ofcform" width=690 height=320 frameborder=0 scrolling=auto src=OFCForm.aspx></iframe>
     脚本如下:
    function setTab(e,name,cursel) 
{
    var links = document.getElementById("tabofc").getElementsByTagName('li');
    for (var i = 1; i <= links.length; i ++)
    {
        var menu = document.getElementById(name+i);
        if(i==cursel){ menu.className="leftb1a"; }
        else{menu.className=""; }
    }
    //将LI中的内容通过页面传给下一个页面。
    document.getElementById("ofcform").src = "OFCForm.aspx?fwlx="+escape(e.innerText);
}    
      目的:点击一下LI标签,刷新一次iframe中的页面
第二步:
      OFCForm.aspx页面,就是将OFC数据源输出到这个页面上,
       页面代码如下:
       <script type="text/javascript">
      swfobject.embedSWF("open-flash-chart.swf", "Div1", "660", "290","9.0.0", "expressInstall.swf",{"data-file":"OFCDataSource.aspx"});
</script>
<div id="Div1"></div>      CS代码如下:
       //将iframe传过来的值存到COOKIES中,以便给数据源输入使用
       Response.Cookies["FWLX"].Value = Request["fwlx"].ToString();第三步:
      OFCDataSource.aspx页面,主要就是通过前面的页面写入的COOKIES查询,并将控件输出到页面上
       CS代码如下:
                  //其它页面保存的COOKIES值
                  string idxmxq = Request.Cookies["IDXMXQ"].Value;
                //通过点击LI标签,刷新IFRAME后写入的COOKIES值
                string fwlx = Request.Cookies["FWLX"].Value;                //加载数据集
                DataSet ds = new DataSet();
                ds = housefacade.SEL_Sel_Top10_FZZANDZZ(idxmxq, fwlx);                if (ds.Tables[0].Rows.Count > 0)
                {                    OpenFlashChart.OpenFlashChart chart = new OpenFlashChart.OpenFlashChart();                    //最低价格折线数据
                    List<double> MinData = new List<double>();
                    //最高价格折线数据
                    List<double> MaxData = new List<double>();
                    //X轴,时间数据
                    List<string> DateMark = new List<string>();                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        //加载最低成交价信息
                        MinData.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["newminjg"].ToString()));
                        //加载最高成交价信息
                        MaxData.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["newmaxjg"].ToString()));
                        //加载X轴,时间数据
                        DateMark.Add(ds.Tables[0].Rows[i]["date"].ToString());                        //取最大数值
                        int temp1 = Convert.ToInt32(ds.Tables[0].Rows[i]["newmaxjg"].ToString());
                        if (temp1 > tempmax || temp1 == tempmax)
                        {
                            this.tempmax = temp1;
                        }                        //取最小数值
                        int temp2 = Convert.ToInt32(ds.Tables[0].Rows[i]["newminjg"].ToString());
                        if (temp2 < tempmin || temp2 == tempmin)
                        {
                            this.tempmin = temp2;
                        }
                    }                    Double max = GetMaxNum(tempmax.ToString());//取最大的整数
                    Double min = GetMinNum(tempmin.ToString());//取最小的整数                    //绘制第一条最低价格折线
                    OpenFlashChart.LineDot line1 = new LineDot();
                    line1.Values = MinData;
                    line1.HaloSize = 0;
                    line1.Width = 1;
                    line1.DotSize = 3;
                    line1.Colour = "#4169e1";
                    line1.Set_Key("最低成交价", 16);                    //绘制第二条最高价格折线
                    OpenFlashChart.LineDot line2 = new LineDot();
                    line2.Values = MaxData;
                    line2.HaloSize = 0;
                    line2.Width = 1;
                    line2.DotSize = 3;
                    line2.Colour = "#ff1493";
                    line2.Set_Key("最高成交价", 16);                    //添加折线
                    chart.AddElement(line1);
                    chart.AddElement(line2);                    //设置控件样式
                    chart.Bgcolor = "#ffffff";//控件背景色
                    chart.Title = new Title("");//控件标题
                    chart.Tooltip = new ToolTip("成交价格:#val# 元");//鼠标指向时的标题                    //定义Y轴刻度
                    chart.Y_Axis.SetRange(min, max, Convert.ToInt32((max - min) / 10));
                    chart.Y_Axis.GridColour = "#a9a9a9";                    //定义X轴刻度
                    chart.X_Axis.Labels.Values = DateMark;
                    chart.X_Axis.Axis3D = 3;
                    chart.X_Axis.Colour = "#7b68ee";
                    chart.X_Axis.Offset = true;
                    chart.X_Axis.GridColour = "#ffffff";                    //输出
                    Response.Clear();
                    Response.CacheControl = "no-cache";
                    //Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=-1");
                    Response.Write(chart.ToPrettyString());
                    Response.End();
===========================结束=====================================谢 谢大家一定帮帮我啊
ofcFlash控件,asp.net

解决方案 »

  1.   

    地址栏直接输入OFCDataSource.aspx是什么结果?
      

  2.   

    测试时OFCDataSource.aspx输出的是:
    { "title": 
    { "text": "", 
    "style": "
    {font-size: 20px; 
    color:#0000ff; 
    font-family: Verdana; 
    text-align: center;}" 
    },
     "x_axis":
     { "labels": {},
     "colour": "#7b68ee", 
    "grid-colour": "#ffffff", 
    "steps": 1, 
    "3d": 3, 
    "offset": true }, 
    "y_axis": 
    { "tick-length": 0, 
    "labels": {}, 
    "grid-colour": "#a9a9a9", 
    "steps": 1500, 
    "min": 10000, 
    "max": 25000, 
    "3d": 0, 
    "offset": true },
     "elements":
     [ { "width": 1,
     "dot-size": 3,
     "halo-size": 0,
     "loop": false, 
    "on-show": {},
     "colour": "#4169e1", 
    "values": [ 18686, 15746, 14897, 15736, 15984, 10987 ], 
    "font-size": 16, 
    "text": "\u6700\u4F4E\u6210\u4EA4\u4EF7", 
    "fill-alpha": 0.35, 
    "type": "line",
     "dot-style": { "on-show": {}, "type": "dot" } 
    },
     { "width": 1, 
    "dot-size": 3, 
    "halo-size": 0, 
    "loop": false, 
    "on-show": {}, 
    "colour": "#ff1493", 
    "values": [ 18737, 17545, 17297, 17511, 17177, 24645 ], 
    "font-size": 16, 
    "text": "\u6700\u9AD8\u6210\u4EA4\u4EF7", 
    "fill-alpha": 0.35, 
    "type": "line", 
    "dot-style": { "on-show": {}, "type": "dot" } } 
    ], 
    "bg_colour": "#ffffff", 
    "tooltip": { "text": "\u6210\u4EA4\u4EF7\u683C:#val# \u5143/\u33A1", "shadow": true, "rounded": 1, "stroke": 2, "mouse": 0 } 
    }部署后OFCDataSource.aspx页什么也没有输出来
    只是在IFRAME里显示:
    Open Flash ChartJSON Parse Error [Syntax Error]
    Error at character 4, line 3:0: 
    1: 
    2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.
    如果将OFCDataSource.aspx这个页面里的两个变量写成固定值的话,测试和部署都没有问题
    如果将OFCDataSource.aspx这个页面里的两个变量用COOKIES传入的话,测试能通过,部署后就不行了感觉好象COOKIES与这个控件有问题,怪事了?还请高手指点一下
    谢谢了
      

  3.   

    可以肯定的是缺少东西,
    测试环境的 C:\inetpub\wwwroot  和 你服务器对比一下。
    看看是否缺少东西。 
      

  4.   

    是的,flash不能传cookie,你可以把参数带在url路径里:
     swfobject.embedSWF("open-flash-chart.swf", "Div1", "660", "290","9.0.0", "expressInstall.swf",{"data-file":"OFCDataSource.aspx?参数名=<%= 参数值 %>"});
      

  5.   

    我的问题搞定了
    我用了一个比较笨的方法,因为我的查询条件是某一个类型,所以我把全部的类型都拿出来,每一个类型对应一个数字,然后传数字,另一个页收到数字后在转换回来,因为我不会转码,嘻嘻很感谢朋友们,一会发分给你们,哈哈老感谢你们了,
    下面是我整理的代码,希望以后能有人用==========================================================================
    OpenFlashChart总结
    1、页面流程及说明
    执行
    顺序 页面名称 描述
    1 housedetails.aspx 主显示页面,有多个LI标签,点击LI标签后将LI中的文本当做参数传递给下一个页面。同时刷新IFRAME中的页面,
    2 OFCJump.aspx 判断前一个页传递过来的值是否为空,在将数值传递给下一个页面
    3 OFCForm.aspx 用JS脚本加载OFC控件,由于此控件对于中文传递支持不好,所以在此页面加了一个中文与数字的对照转换方法,并将转换后的数字传递到下一个页面
    4 OFCDataSource.aspx 根据上一个页面传入的参数,将数字参数转换成文字,查询数据库输出控件2、页面代码
    ===================housedetails.aspx=============================
    html代码如下:
          <!--OFC折线开始-->     
               <div class="leftcsa" id="tabofc">
                    <ul id="ofcli">
                        <li id="ofc1" class="leftb1a" onclick="setTab()">高层</li>
                        <li id="ofc2" onclick="setTab()">多层</li>
                        <li id="ofc3" onclick="setTab()">小高</li>
                        <li id="ofc4" onclick="setTab()">超高</li>
                        <li id="ofc5" onclick="setTab()">网点</li>
                    </ul>
                </div>
                <div class="blank5"></div>
                <div class="leftcsc">
                    <div id="ofc con_one_1">
                         <iframe id="ofcform" width=700 height=330 frameborder=0 scrolling=auto></iframe> 
                    </div>
                </div>  
           <!--OFC折线结束-->//点击LI后,LI内文本变色,并将LI标签内的文本传给下一个页
    <script type="text/javascript">
    function setTab(e,name,cursel) 
    {
        var links = document.getElementById("tabofc").getElementsByTagName('li');
        for (var i = 1; i <= links.length; i ++)
        {
            var menu = document.getElementById(name+i);
            if(i==cursel)
            {
                menu.className="leftb1a";
            }
            else
            {
                menu.className="";
            }
        }
        document.getElementById("ofcform").src = "OFCJump.aspx?tempfwlx="+escape(e.innerText);
    }
    </script>//页面初始化后自动加载默认LI标签中的数曲线控件
    <script type="text/javascript">
        if (document.getElementById("ofcli").getElementsByTagName("li").length > 0) 
        {
            window.onload = setTab(ofc1, 'ofc', 1);
        }
    </script>CS代码:
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    Response.Cookies["IDXMXQ"].Value = null;
                    Response.Cookies["IDXMXQ"].Value = Request["newcode"].ToString();
                    Sel_Fwlx();//加载LI标签
                }
            }======================OFCJump.aspx=========================
    Html代码:无
    CS代码:
    protected void Page_Load(object sender, EventArgs e)
            {
                if (Request["tempfwlx"] != null)
                {
                    Response.Cookies["FWLX"].Value = null;
                    string sssss = Request["tempfwlx"].ToString().Trim();
                    Response.Redirect("OFCForm.aspx?jumpfwlx=" + sssss);
                }
                else
                {
                    Response.Redirect("OFCNothing.aspx");
                }
            }
    此页面主要处理Cookies和页页传值,适当处理后可以不要此页面。========================OFCForm.aspx====================
    Html代码
    <head runat="server">
    <script type="text/javascript" src="swfobject.js"></script>//引入OFC控件的JS脚本
    <title>无标题页</title>
    </head>
    <script type="text/javascript">
     swfobject.embedSWF("open-flash-chart.swf", "Div1", "660", "300",
     "9.0.0", "expressInstall.swf",{"data-file":"OFCDataSource.aspx?formfwlx=<%= sssss %>"});
    </script>
    <div id="Div1">
    </div>
    swfobject.embedSWF参数说明:
    open-flash-chart.swf:使用的FLASH
    Div1:控件输出的位置
    660:宽度
    300:高度
    9.0.0:FLASH输出版本
    expressInstall.swf:客户端没有安装FLASH时是否提示安装
    OFCDataSource.aspx?formfwlx=<%= sssss %>:控件的数据库源,此控件使用CS代码方式输出
    CS代码:
    protected string sssss;
            protected void Page_Load(object sender, EventArgs e)
            {
                string dh = Request["jumpfwlx"].ToString();            #region ========== 中文转数字==========
                //因为此控件传递中文出现乱码,故此使用此方法,由于本人对转码不是很了解,所以用了一个很笨的方法
                switch (dh)
                {
                    case ("超高层"):
                        sssss = "1"; 
                        break;
                    case ("多层"):
                        sssss = "2";
                        break;
                    case ("高层"):
                        sssss = "3";
                        break;
                    case ("小高层"):
                        sssss = "4";
                        break;
                    case ("写字间"):
                        sssss = "5";
                        break;
                    case ("网点"):
                        sssss = "6";
                        break;
                    case ("别墅"):
                        sssss = "7";
                        break;
                    case ("公寓"):
                        sssss = "8";
                        break;
                    case ("办公楼"):
                        sssss = "9";
                        break;
                    case ("商业"):
                        sssss = "10";
                        break;
                    case ("厂房"):
                        sssss = "11";
                        break;
                    case ("仓库"):
                        sssss = "12";
                        break;
                    case ("车库"):
                        sssss = "13";
                        break;
                }
                #endregion ============================        }
      

  6.   

    ===================OFCDataSource.aspx=========================
    Html代码:无
    CS代码:
    using OpenFlashChart;
    using System.Xml;
    using System.Collections.Generic;
    using System.Text;
    public partial class OFCDataSource : housebase
        {
            protected double tempmax = 0;
            protected double tempmin = 1000000;
            #region ========== 页面加载事件==========
            /// <summary>
            /// 页面加载事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void Page_Load(object sender, EventArgs e)
            {
                string idxmxq = Request.Cookies["IDXMXQ"].Value;
                string fwlx = Request["formfwlx"].ToString();
                string yy = fwlx;
                #region ========== 数字传中文==========
                //将数字在转换成对应的中文
                switch (yy)
                {
                    case ("1"):
                        fwlx = "超高层";
                        break;
                    case ("2"):
                        fwlx = "多层";
                        break;
                    case ("3"):
                        fwlx = "高层";
                        break;
                    case ("4"):
                        fwlx = "小高层";
                        break;
                    case ("5"):
                        fwlx = "写字间";
                        break;
                    case ("6"):
                        fwlx = "网点";
                        break;
                    case ("7"):
                        fwlx = "别墅";
                        break;
                    case ("8"):
                        fwlx = "公寓";
                        break;
                    case ("9"):
                        fwlx = "办公楼";
                        break;
                    case ("10"):
                        fwlx = "商业";
                        break;
                    case ("11"):
                        fwlx = "厂房";
                        break;
                    case ("12"):
                        fwlx = "仓库";
                        break;
                    case ("13"):
                        fwlx = "车库";
                        break;
                }
                #endregion ======
                //加载数据集
                DataSet ds = new DataSet();
                ds = housefacade.SEL_Sel_Top10_FZZANDZZ(idxmxq, fwlx);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    OpenFlashChart.OpenFlashChart chart = new OpenFlashChart.OpenFlashChart();
                    //最低价格折线数据
                    List<double> MinData = new List<double>();
                    //最高价格折线数据
                    List<double> MaxData = new List<double>();
                    //X轴,时间数据
                    List<string> DateMark = new List<string>();
                    //加载曲线数据
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        //加载最低成交价信息
                      MinData.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["newminjg"].ToString()));
                        //加载最高成交价信息
                      MaxData.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["newmaxjg"].ToString()));
                        //加载X轴,时间数据
                        DateMark.Add(ds.Tables[0].Rows[i]["date"].ToString());
                        //取最大数值
                        int temp1 = Convert.ToInt32(ds.Tables[0].Rows[i]["newmaxjg"].ToString());
                        if (temp1 > tempmax || temp1 == tempmax)
                        {
                            this.tempmax = temp1;
                        }
                        //取最小数值
                        int temp2 = Convert.ToInt32(ds.Tables[0].Rows[i]["newminjg"].ToString());
                        if (temp2 < tempmin || temp2 == tempmin)
                        {
                            this.tempmin = temp2;
                        }
                    }
                    Double max = GetMaxNum(tempmax.ToString());//取最大的整数
                    Double min = GetMinNum(tempmin.ToString());//取最小的整数
                    //绘制第一条最低价格折线
                    OpenFlashChart.LineDot line1 = new LineDot();
                    line1.Values = MinData;
                    line1.HaloSize = 0;
                    line1.Width = 1;
                    line1.DotSize = 3;
                    line1.Colour = "#4169e1";
                    line1.Set_Key("最低成交价[元/㎡]", 12);
                    //绘制第二条最高价格折线
                    OpenFlashChart.LineDot line2 = new LineDot();
                    line2.Values = MaxData;
                    line2.HaloSize = 0;
                    line2.Width = 1;
                    line2.DotSize = 3;
                    line2.Colour = "#ff1493";
                    line2.Set_Key("最高成交价[元/㎡]", 12);
                    //添加折线
                    chart.AddElement(line1);
                    chart.AddElement(line2);
                    //设置控件样式
                    chart.Bgcolor = "#ffffff";//控件背景色
                    chart.Title = new Title("");//控件标题
                    chart.Tooltip = new ToolTip("最新成交价:#val# /㎡");//鼠标指向时的标题
                    //定义Y轴刻度
                    chart.Y_Axis.SetRange(min, max, Convert.ToInt32((max - min) / 10));//最小值,最大值,步长
                    chart.Y_Axis.GridColour = "#a9a9a9";
                    //定义X轴刻度
                    chart.X_Axis.Labels.Values = DateMark;
                    chart.X_Axis.Axis3D = 3;
                    chart.X_Axis.Colour = "#7b68ee";
                    chart.X_Axis.Offset = true;
                    chart.X_Axis.GridColour = "#ffffff";
                    //输出
                    Response.Clear();
                    Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=-1");
                    Response.Write(chart.ToString());
                    Response.End();
                }
            }
            #endregion ========================        #region ========== 取最大的整数==========
            /// <summary>
            /// 描述:取最大的整数
            /// 输出:=13000;-123.1=130;.1=130;如果整数位只有一位,则输出整数位
            /// 错误:如果为空或非数值类型,输出:
            /// </summary>
            /// <param name="num"></param>
            /// <returns></returns>
            public int GetMaxNum(string num)
            {
                try
                {
                    if (!num.Equals(null) && num.Length > 2)
                    {
                        decimal temp = Convert.ToDecimal(num);
                        temp = Math.Abs(temp);
                        string temp1 = Convert.ToInt32(temp).ToString();                    //取第一位,并按位长依次补“”
                        string firstnum = temp1.Substring(0, 1);
                        for (int i = 1; i < temp1.Length; i++)
                        {
                            firstnum = firstnum + "0";
                        }
                        //取第二位,并按位长减一补“”
                        string ssecnum = Convert.ToString(Convert.ToInt32(temp1.Substring(1, 1)) + 1);
                        for (int i = 1; i < temp1.Length - 1; i++)
                        {
                            ssecnum = ssecnum + "0";
                        }
                        return Int32.Parse(firstnum) + Int32.Parse(ssecnum);
                    }
                    else { return 20000; }
                }
                catch { return 20000; }
            }
            #endregion ===============================        #region ========== 取最小的整数==========
            /// <summary>
            /// 描述:取最小的整数
            /// 输出:=12000;-123.1=100;.1=100;如果整数位只有一位,则输出整数位
            /// 错误:如果为空或非数值类型,输出:
            /// </summary>
            /// <param name="num"></param>
            /// <returns></returns>
            public int GetMinNum(string num)
            {
                try
                {
                    if (num != null)
                    {
                        decimal temp = Convert.ToDecimal(num);
                        temp = Math.Abs(temp);
                        string temp1 = Convert.ToInt32(temp).ToString();
                        string firstnum = temp1.ToString().Substring(0, 1);
                        for (int i = 1; i < temp1.Length; i++)
                        {
                            firstnum = firstnum + "0";
                        }
                        return Int32.Parse(firstnum);
                    }
                    else { return 500; }
                }
                catch { return 500; }
            }
            #endregion ===============================
        }3、DLL引入方式
    在项目中引入OpenFlashChart.dll
    在工具箱中引入OpenFlashChart.dll
    注意:此控件对中文支持不好,在页面传值的时候,中文会乱码。
    在项目中需要引用的资源如下:
    1、OpenFlashChart.dll
    2、open-flash-chart.swf
    3、swfobject.js
    本实例使用的是OFC1.0版本
     
     
    作者:董昊
    时间:2013-8-8
    联系方式:QQ:2355476737(工作)或117184286(个人)