zoukankan      html  css  js  c++  java
  • [ASP.NET MVC3]Chart的ActionResult扩展

    ASP.NET3为我们带来了很多新特性,其中ChartHelper也是相当给力。比如我们要生成一张这样的图表:

    image

    我们需要在controller中这样写(这里不考虑通过ViewModel在页面上通过Chart生成图表的方式):

    public ActionResult Chart2() {
        var chart = new Chart( 500, height: 300, theme: ChartTheme.Blue)
            .AddSeries(
                chartType: "bar",
                legend: "Rainfall",
                xValue: new[] { "南京", "武汉", "上海", "苏州", "沈阳" },
                yValues: new[] { "95", "80", "70", "72", "92" })
            .AddTitle("分公司年末预测率汇总")
            .SetXAxis(title: "分公司")
            .SetYAxis(title: "预测率(%)");
        chart.Write();
        return null;
    }

    然后页面上用一个img标签载入action生成的图片

    <img src="/Home/Chart2" alt="测试图表2" />
    

    但是那个return null是不是有点过分的ugly了?为此我们可以简单编写一个ChartResult:

    public class ChartResult : ActionResult {
        private readonly Chart _chart;
        private readonly string _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 Chart Chart {
            get { return _chart; }
        }
    
        public string Format {
            get { return _format; }
        }
    
        public override void ExecuteResult(ControllerContext context) {
            _chart.Write(_format);
        }
    }

    (注意这里用到了可选参数,如果您还在用.NET3.5,请自行调整)

    最终controller中的代码:

    public ActionResult Chart2() {
        var chart = new Chart( 500, height: 300, theme: ChartTheme.Blue)
            .AddSeries(
                chartType: "bar",
                legend: "Rainfall",
                xValue: new[] { "南京", "武汉", "上海", "苏州", "沈阳" },
                yValues: new[] { "95", "80", "70", "72", "92" })
            .AddTitle("分公司年末预测率汇总")
            .SetXAxis(title: "分公司")
            .SetYAxis(title: "预测率(%)");
        
    return new ChartResult(chart);
    }

    OK,have fun~MSCNTAC Logo

    作者:紫色永恒

    出处:http://024hi.cnblogs.com/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

  • 相关阅读:
    HEOI2016 题解
    数据结构考前复习【已弃】
    BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
    BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]
    BZOJ 3990: [SDOI2015]排序 [搜索]
    字符串考前总结
    BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
    CF698C. LRU [容斥原理 概率]
    BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
    BZOJ 1444: [Jsoi2009]有趣的游戏 [AC自动机 高斯消元]
  • 原文地址:https://www.cnblogs.com/024hi/p/1913691.html
Copyright © 2011-2022 走看看