分享下小白的辛苦历程,明明是小白,要求还挺高,虽然C#里就带了charts插件,非常简单,也有示例,但是总感觉图表没有echarts的好看,所以就想要换成echarts,但是不会后台传输data值到前端,网上找了好多方法,都是利用json的,有的是用到了ashx,弄了几天没弄明白,搁置了一段时间,最近又想起来研究下,看到了一篇文档觉得挺好,不用单独建立ashx文件了,后台直接生成json,前台引用。不过新手对很多函数命令不是很懂,无奈,只好完全照搬吧!不过我在实际操作的时候还是遇到了问题,好多命令不懂真是苦恼,错在哪知道了(还好vs有错误语句显示,不然就是错在哪都不知道了。),可是怎么改不知道该如何是好。
下面的是我对原文的修改部分,历尽艰辛终于完成了,对于很多会的人我想大概是不难的,分分钟搞定,但是很多像我一样的小白估计跟我一样,一个简单的问题要卡好长时间才能研究明白,所以把这个给自学的小白们分享下,做个参考。。。。
我用的vs2017,echarts用的最新的,5.0.2
我是完全复制的,但是提示
研究了半天这个JSON是啥不知道,无奈啊,只好想替代办法,反正就是把内容转换成json,网上找到了下面这句。(问了博主回复我是“封装好的json操作类 ,来个邮箱发你”,可惜我看到的时候已经找了替代办法。)
string json = JsonConvert.SerializeObject(newObj);
但是得先引用 json.net.net4.0
然后就可以使用了。
别忘了先引用下。。。。
using Newtonsoft.Json;
当然也可以不引用,直接输入以下语句。
string json = Newtonsoft.Json.JsonConvert.SerializeObject(newObj);
做完这些在调试阶段依然报错

看到这个我想大概是传递成功了,因为这显示的就是我的html的代码,第一行的就是我要传递过来的数据,就是哪个地方出错了不知道,后面弹出的3个框200,4,parsereerror,表示已经成功了,最后一个错误就是说json错误,于是我又在网上翻了半天发现有类似问题,说后面缺少2段命令。
Response.Flush();和Response.Close();
于是原文最后4段修改成以下内容,最终调试成功了。
string json = JsonConvert.SerializeObject(newObj);
Response.Write(json);
Response.Flush();
Response.Close();

另外要提醒下小白,哪个创建Series类,就是把内容复制到c#后台代码中,在最后面就行了。当然要在public partial class admin_Chart_ZFB_char : Page{里面。
在网上看了还是ashx比较方便,就研究了下发现其实也挺简单的。
下面的链接是我用ajax和ashx交互的链接。
c# asp.net利用ajax和ashx文件进行交互_●紫枫的博客-CSDN博客 https://blog.csdn.net/weixin_41053472/article/details/116596621
标题以下是原文内容。
原文链接:[https://blog.csdn.net/qq_18816201/article/details/100656662]
前端页面↓
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<!-- 引入 echarts.js -->
<script src="../../peizhi/echartsjs/echarts.min.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 100%;height:900px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化ECharts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var options = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data: [] //'销量'
},
xAxis: {
data: [] //"衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋"
},
yAxis: {},
series: []
/*
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 20]
}
*/
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(options);
//ECharts 支持常规的鼠标事件类型,包括 'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout'、'globalout'、'contextmenu' 事件
// 处理点击事件并且跳转到相应的百度搜索页面
myChart.on('click', function (params) {
window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
});
//通过Ajax获取数据
$.ajax({
type: "POST",
async: false,
url: "ZFB_char.aspx?action=LoadChart",
dataType: "json",
beforeSend: function () {
myChart.showLoading(); //显示加载动画效果
},
success: function (obj) {
console.log(obj);
if (obj) {
options.xAxis.data = obj.xList; //给X轴数据
options.series = obj.series; //给series数据
options.legend.data = obj.legend; //给legend数据
myChart.hideLoading(); //隐藏动画加载效果
myChart.setOption(options); //设置图表实例的配置项以及数据
}
},
error: function (XMLHttpRequest, textStatus, errorThrown)
{
alert(XMLHttpRequest.responseText);
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
</script>
</body>
</html>
创建Series类
/// <summary>
/// 图表Series参数
/// </summary>
public class Series
{
/// series序列组名称
public string name
{
get;
set;
}
/// series序列组呈现图表类型
public string type
{
get;
set;
}
/// series序列组呈现对应的Y轴刻度
public int yAxisIndex
{
get;
set;
}
/// series序列组的数据为数据类型数组
public List<int> data
{
get;
set;
}
}
C#后台代码↓
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class admin_Chart_ZFB_char : Page
{
protected void Page_Load(object sender, EventArgs e)
{
string action = Request["action"];
switch (action)
{
case "LoadChart"://查询数据
LoadChart();
break;
default:
break;
}
}
private void LoadChart()
{
//legend集合
List<string> legendList = new List<string>();
legendList.Add("销量");
//X轴集合
List<string> xList = new List<string>();//"衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"
xList.Add("衬衫"); xList.Add("羊毛衫"); xList.Add("雪纺衫"); xList.Add("裤子"); xList.Add("高跟鞋");
//series集合
List<Series> seriesList = new List<Series>();
//定义一个Series对象
Series seriesObj = new Series();
//seriesObj.id = 1;
seriesObj.name = "销量";
seriesObj.type = "bar"; //柱形
seriesObj.data = new List<int>(); //先初始化 不初始化后面直直接data.Add(x)会报错
int[] sz = new int[] { 5, 20, 36, 10, 20 };
for (int i = 0; i < sz.Length; i++)
{
seriesObj.data.Add(sz[i]);
}
seriesList.Add(seriesObj);
var newObj = new
{
xList = xList, //X轴集合
series = seriesList, //series集合
legend = legendList //legend集合
};
String json = JSON.Encode(newObj);
Response.Write(json);
}
}
效果图↓
传到前台的json数据↓
————————————————
版权声明:本文为CSDN博主「本将仍在」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18816201/article/details/100656662