当前位置: 移动技术网 > IT编程>开发语言>.net > Chart.js 與 ASP.NET MVC 整合應用

Chart.js 與 ASP.NET MVC 整合應用

2019年01月03日  | 移动技术网IT编程  | 我要评论

青春梦网神仙道,丹61库珀事件,功夫派剑仙在哪

chart.js 是一套開放原始碼的「圖表」繪製函式庫,和其他第三方的圖表工具相比,chart.js 的特色如下:

  • 支援 html 5、響應式網頁 (rwd, responsive web design)
  • 可免費使用,且可作為商業用途
  • 開放原始碼 (github)
  • 可用 javascript 操作及開發
  • 可與 json 格式整合,因此能與 asp.net mvc、asp.net webapi、ajax 技術作整合,便於資料傳遞

圖 1 本文範例的執行畫面 (.html、.cshtml)

-------------------------------------------------
本文的 asp.net mvc 範例下載:
https://files.cnblogs.com/files/wizardwu/190101.zip
---------------------------------------------------

chart.js 官方網站:

chart.js 使用方式:
visual studio 中的引用方式,用 nuget 安裝 chart.js,並在頁面中引用 chart.min.js。

----------------------------------------------------------------------------------------------------------------------------------------

以下的範例 1,以單純的 .html 來測試 chart.js (不使用 .net / c#)。資料來源,是寫死在頁面裡的 javascript。

 1 <!doctype html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8" />
 5     <title></title>
 6     <!--<link href="../content/bootstrap.min.css" rel="stylesheet" />-->
 7     <script src="../scripts/chart.min.js"></script>
 8 </head>
 9 <body>
10     <canvas id="mychart"></canvas>
11 
12     <script>
13         var ctx = document.getelementbyid("mychart");
14         var chart = new chart(ctx, {
15             type: "line",
16             data: {
17                 labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
18                 datasets: [{
19                     label: "台北",
20                     fill: false,
21                     backgroundcolor: 'rgba(255,165,0,0.3)',
22                     bordercolor: 'rgb(255,135,20)',
23                     pointstyle: "circle",
24                     pointbackgroundcolor: 'rgb(0,222,0)',
25                     pointradius: 5,
26                     pointhoverradius: 10,
27                     data: [13.1, 10.2, 13.5, 20.9, 25.2, 27.1, 31.8]
28                 }, {
29                     label: "高雄",
30                     fill: false,
31                     backgroundcolor: 'rgba(0,255,255,0.3)',
32                     bordercolor: 'rgb(0,225,255)',
33                     pointstyle: "triangle",
34                     pointbackgroundcolor: 'blue',
35                     pointradius: 5,
36                     pointhoverradius: 10,
37                         data: [29.1, 28.3, 22.6, 25.4, 27.5, 23.4]
38 
39                 }, {
40                     label: "越南",
41                     fill: false,
42                     backgroundcolor: 'rgba(153,50,204,0.3)',
43                     bordercolor: 'rgb(123,55,190)',
44                     pointstyle: "rect",
45                     pointbackgroundcolor: 'rgb(220,20,60)',
46                     pointradius: 5,
47                     pointhoverradius: 10,
48                         data: [16.6, 17.3, 19.2, 23.8, 12.0, 17.6]
49 
50                 }]
51             },
52             options: {
53                 responsive: true,
54                 title: {
55                     display: true,
56                     fontsize: 26,
57                     text: '2019 年各分公司 1 - 6 月份營業額'
58                 },
59                 tooltips: {
60                     mode: 'point',
61                     intersect: true,
62                 },
63                 hover: {
64                     mode: 'nearest',
65                     intersect: true
66                 },
67                 scales: {
68                     xaxes: [{
69                         display: true,
70                         scalelabel: {
71                             display: true,
72                             labelstring: '月份',
73                             fontsize: 15
74                         },
75                         ticks: {
76                             fontsize: 15
77                         }
78                     }],
79                     yaxes: [{
80                         display: true,
81                         scalelabel: {
82                             display: true,
83                             labelstring: '百萬(美元)',
84                             fontsize: 15
85                         },
86                         ticks: {
87                             fontsize: 15
88                         }
89                     }]
90                 },
91                 animation: {
92                     duration: 2000
93                 }
94             }
95         });
96     </script>
97 </body>
98 </html>
\htmlpages\linechart.html

 

以下的範例 2,使用 asp.net mvc 來測試 chart.js。

資料來源,取自 controller 層 (c# collection 轉成 json 格式)。亦可改成取自 webapi 或資料庫。

 

 1 using system.web.mvc;
 2 using chartjs.models;
 3 using newtonsoft.json;
 4 using newtonsoft.json.linq;
 5 
 6 namespace chartjs.controllers
 7 {
 8     public class branchcontroller : controller
 9     {
10         // get: branch
11         public actionresult index()
12         {
13             return view();
14         }
15 
16         public actionresult getbusinessjsondata()
17         {
18             string[] arrmonth = { "1月", "2月", "3月", "4月", "5月", "6月" };
19 
20             //c# convert json string
21             string jsonmonth = newtonsoft.json.jsonconvert.serializeobject(arrmonth);
22             viewbag.jsonmonth = jsonmonth;
23 
24             list<branch> branchs = new list<branch>
25             {
26                 new branch
27                 {
28                     city="台北",
29                     business = new double[] { 13.1, 10.2, 13.5, 20.9, 25.2, 27.1, 31.8 }
30                 },
31                 new branch{
32                     city="高雄",
33                     business = new double[] { 29.1, 28.3, 22.6, 25.4, 27.5, 23.4 }
34 
35                 },
36                 new branch{
37                     city="越南",
38                     business = new double[] { 16.6, 17.3, 19.2, 23.8, 12.0, 17.6 }
39                 }
40             };
41 
42             //c# convert json string
43             string jsonbusiness = newtonsoft.json.jsonconvert.serializeobject(branchs);
44             viewbag.jsonbusiness = jsonbusiness;
45 
46             //回傳 json 格式,讓各種 client 裝置,以 ajax 方式呼叫的 api
47             //return json(branchs, jsonrequestbehavior.allowget);
48 
49             return view(branchs);
50         }
51     }
52 }
\controllers\branchcontroller.cs

 

  1 @model ienumerable<chartjs.models.branch>
  2 
  3 @{
  4     viewbag.title = "chart.js 範例";
  5 }
  6 @*<h2>index</h2>*@
  7 
  8 <script src="../scripts/chart.min.js"></script>
  9 
 10 <canvas id="mychart"></canvas>
 11 
 12 <table>
 13     <!--從 model 讀取 business 資料-->
 14     @*@{ var js = new system.web.script.serialization.javascriptserializer(); }
 15 
 16     @foreach (var m in model)
 17     {
 18         <tr>
 19             <td>@html.displayfor(x => m.city)</td>
 20             <td>@js.serialize(m.business)</td>
 21         </tr>
 22     }*@
 23 </table>
 24 
 25 <script>
 26     //將 json 資料,指派給 javascript array
 27     //月份 (1月~6月)
 28     var jsmonth = @html.raw(viewbag.jsonmonth);
 29 
 30     //三個城市的 city、business
 31     var jsbusiness = @html.raw(viewbag.jsonbusiness);
 32 
 33     var ctx = document.getelementbyid("mychart");
 34     var chart = new chart(ctx, {
 35         type: "line",
 36         data: {
 37             //labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
 38             labels: jsmonth,
 39             datasets: [{
 40                 //label: "台北",
 41                 label: jsbusiness[0].city,
 42                 fill: false,
 43                 backgroundcolor: 'rgba(255,165,0,0.3)',
 44                 bordercolor: 'rgb(255,135,20)',
 45                 pointstyle: "circle",
 46                 pointbackgroundcolor: 'rgb(0,222,0)',
 47                 pointradius: 5,
 48                 pointhoverradius: 10,
 49                 data: jsbusiness[0].business
 50                 //data: [13.1, 10.2, 13.5, 20.9, 25.2, 27.1, 31.8]
 51             }, {
 52                 //label: "高雄",
 53                 label: jsbusiness[1].city,
 54                 fill: false,
 55                 backgroundcolor: 'rgba(0,255,255,0.3)',
 56                 bordercolor: 'rgb(0,225,255)',
 57                 pointstyle: "triangle",
 58                 pointbackgroundcolor: 'blue',
 59                 pointradius: 5,
 60                 pointhoverradius: 10,
 61                 data: jsbusiness[1].business
 62                 //data: [29.1, 28.3, 22.6, 25.4, 27.5, 23.4]
 63                 }, {
 64                 //label: "越南",
 65                 label: jsbusiness[2].city,
 66                 fill: false,
 67                 backgroundcolor: 'rgba(153,50,204,0.3)',
 68                 bordercolor: 'rgb(123,55,190)',
 69                 pointstyle: "rect",
 70                 pointbackgroundcolor: 'rgb(220,20,60)',
 71                 pointradius: 5,
 72                 pointhoverradius: 10,
 73                 data: jsbusiness[2].business
 74                 //data: [16.6, 17.3, 19.2, 23.8, 12.0, 17.6]
 75             }]
 76         },
 77         options: {
 78             responsive: true,
 79             title: {
 80                 display: true,
 81                 fontsize: 26,
 82                 text: '2019 年各分公司 1 - 6 月份營業額'
 83             },
 84             tooltips: {
 85                 mode: 'point',
 86                 intersect: true,
 87             },
 88             hover: {
 89                 mode: 'nearest',
 90                 intersect: true
 91             },
 92             scales: {
 93                 xaxes: [{
 94                     display: true,
 95                     scalelabel: {
 96                         display: true,
 97                         labelstring: '月份',
 98                         fontsize: 15
 99                     },
100                     ticks: {
101                         fontsize: 15
102                     }
103                 }],
104                 yaxes: [{
105                     display: true,
106                     scalelabel: {
107                         display: true,
108                         labelstring: '百萬(美元)',
109                         fontsize: 15
110                     },
111                     ticks: {
112                         fontsize: 15
113                     }
114                 }]
115             },
116             animation: {
117                 duration: 2000
118             }
119         }
120     });
121 </script>
\views\branch\getbusinessjsondata.cshtml

 

----------------------------------------------------------------------------------------------------------------------------------------
參考資料:

[1] chart.js 官方網站

[2] asp.net web api (msdn)

----------------------------------------------------------------------------------------------------------------------------------------
參考書籍:

[1] 網頁程式設計 asp.net mvc 5.x 範例完美演繹 (繁體書籍), ch 5、ch 6, 作者:奚江華

[2] 跟著實務學習 asp.net mvc (繁體書籍), 作者:蔡文龍、蔡捷雲、歐志信、曾芷琳、萬鴻曜

----------------------------------------------------------------------------------------------------------------------------------------

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网