zoukankan      html  css  js  c++  java
  • [ASP.NET MVC3] Razor Chart的使用总结

    ASP.NET3为我们带来了很多新特性,其中ChartHelper相当给力,介绍一下程序集里图表的功能,这个chart使用简单,且前台不需引用js脚本文件,可使用缓存文件,数据源方式很多,比较方便。

    图表的类型有以下很多种:

     

    成员名称

    说明

     

    Point

    点图类型。

     

    FastPoint

    快速点图类型。

     

    Bubble

    气泡图类型。

     

    Line

    折线图类型。

     

    Spline

    样条图类型。

     

    StepLine

    阶梯线图类型。

     

    FastLine

    快速扫描线图类型。

     

    Bar

    条形图类型。

     

    StackedBar

    堆积条形图类型。

     

    StackedBar100

    百分比堆积条形图类型。

     

    Column

    柱形图类型。

     

    StackedColumn

    堆积柱形图类型。

     

    StackedColumn100

    百分比堆积柱形图类型。

     

    Area

    面积图类型。

     

    SplineArea

    样条面积图类型。

     

    StackedArea

    堆积面积图类型。

     

    StackedArea100

    百分比堆积面积图类型。

     

    Pie

    饼图类型。

     

    Doughnut

    圆环图类型。

     

    Stock

    股价图类型。

     

    Candlestick

    K 线图类型。

     

    Range

    范围图类型。

     

    SplineRange

    样条范围图类型。

     

    RangeBar

    范围条形图类型。

     

    RangeColumn

    范围柱形图类型。

     

    Radar

    雷达图类型。

     

    Polar

    极坐标图类型。

     

    ErrorBar

    误差条形图类型。

     

    BoxPlot

    盒须图类型。

     

    Renko

    砖形图类型。

     

    ThreeLineBreak

    新三值图类型。

     

    Kagi

    卡吉图类型。

     

    PointAndFigure

    点数图类型。

     

    Funnel

    漏斗图类型。

     

    Pyramid

    棱锥图类型。

    1.后台初始化一个Chart方法如下:

     public ActionResult AccessStatisticsChart(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);//使用缓存
    
                if (chart == null)
                {
                    DateTime sDate = startDate;
                    List<string> xValue = new List<string>();
                    List<string> yValue = new List<string>();
                    Random myRandom = new Random();
                    while (startDate <= endDate)
                    {
                        xValue.Add(startDate.ToString("MM/dd"));
                        yValue.Add(myRandom.Next(10, 50).ToString());
                        startDate = startDate.AddDays(1);
                    }
    
                    chart = new System.Web.Helpers.Chart( 600, height: 300, theme: ChartTheme.Green)
                           .AddTitle("网站访问量统计图")
                           .AddSeries(name: "网站访问量", xValue: xValue, yValues: yValue, markerStep: 1, chartType: "line", axisLabel: "访问量")
                           .AddLegend(name: "网站访问量")
                           .SetXAxis(title: "日期").SetYAxis(title: "访问量");
                    chart.SaveToCache(key: key, minutesToCache: 5);
    
                    Session["xValue"] = xValue;
                    Session["yValue"] = yValue;
                }
    
                return new ChartResult(chart);
            }
    ChartResult 是自封装的一个类,这样使代码更简洁:
     public class ChartResult : ActionResult
        {
            private readonly Chart _chart;
            private readonly string _format;
    
            public Chart Chart { get { return _chart; } }
            public string Format { get { return _format; } }
    
            public ChartResult(Chart chart, string format = "png")
            {
                if (chart == null)
                    throw new ArgumentNullException("chart");
    
                _chart = chart;
                _format = format;
    
                if (string.IsNullOrEmpty(_format))
                    _format = "png";
            }
             
            public override void ExecuteResult(ControllerContext context)
            {
                _chart.Write(_format);
            } 
        }
    2.由于图表是Write出来的,在页面加载时直接显示占用整张页面,所以前台要返回一个View,然后在页面里面调用生成图表的方法,这个名为AccessStatisticsView的View前后台代码如下:
    public ActionResult AccessStatisticsView(DateTime startDate, DateTime endDate)
    {

      ViewBag.StartDateTime = startDate;
      ViewBag.EndDateTime = endDate;
      return PartialView();
    }

    -------------------------------------------------------
    @{
    ViewBag.Title
    = "用户访问量统计"; Layout = null; } <img src="@Url.Action("AccessStatisticsChart", new { startDate = ViewBag.startDateTime, endDate = ViewBag.EndDateTime })" />
     3.事件的入口可以用Ajax进行加载
        function confirmStatistics() {
                var startDate = $("#startDate").val();
                var endDate = $("#endDate").val();
                if (startDate == "") { alert("请选择开始日期"); }
                if (endDate == "") { alert("请选择结束日期"); }
                $("#statisticsResult").load("/Statistics/AccessStatisticsView", { 'startDate': startDate, 'endDate': endDate });
             }

    4.运行效果图:

    5.图表可以生成XML文件,生成方法如下:

      [HttpPost]
            public ActionResult SaveASXML(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);
                if (chart == null)
                {
                    return this.JsonResult2("fail", "未查询到图表缓存,请先进行统计.");
                }
                string filePathName = SysConfig.StatisticsXMlParh + @"" + key + ".xml";
    
                if (!System.IO.Directory.Exists(SysConfig.StatisticsXMlParh))
                {
                    System.IO.Directory.CreateDirectory(SysConfig.StatisticsXMlParh);
                }
    
                chart.SaveXml(path: filePathName);
                return this.JsonResult2("suc", "生成XML文件成功.");
            }
            [HttpPost]

    6.图表可以保存为图表,放下如下:

      [HttpPost]
            public ActionResult SaveASImg(DateTime startDate, DateTime endDate)
            {
                string key = "Access_" + startDate.ToString("yyyyMMdd") + "_" + endDate.ToString("yyyyMMdd");
                var chart = Chart.GetFromCache(key);
                if (chart == null)
                {
                    return this.JsonResult2("fail", "未查询到图表缓存,请先进行统计.");
                }
                string filePathName = SysConfig.StatisticsImgParh + @"" + key + ".png";
    
                if (!System.IO.Directory.Exists(SysConfig.StatisticsImgParh))
                {
                    System.IO.Directory.CreateDirectory(SysConfig.StatisticsImgParh);
                }
    
                chart.Save(path: filePathName);
                return this.JsonResult2("suc", "保存图片文件成功.");
            }
  • 相关阅读:
    python appium环境搭建
    github 删除某个文件
    python 导入的模块使用了相对路径,导致找不到文件错误
    python asyncio协程
    python 获取调用函数的名字和行号
    monkey测试命令
    python 属性查询顺序,数据描述符
    JS各循环的差别
    AngularJS复习小结
    那些不正经的前端笔试题
  • 原文地址:https://www.cnblogs.com/wangchengshen/p/3853325.html
Copyright © 2011-2022 走看看