ASP.NET MVC 3图表

时间:2014-11-19 16:47:55

标签: c# asp.net asp.net-mvc asp.net-mvc-3 charts

我对这个图表事物不熟悉,而且我这样做的方式非常低效,所以我认为应该有更好的方法。

目前我有一个控制器,它创建一个模型,从数据库中提取所有数据,并进行大量的解析等,然后在视图中显示所有数据,数据在几个表中布局。

同样在View中是一系列调用控制器中的动作的img。该操作生成模型的新实例,并使用数据创建图表图像,并将其返回到View。

由于我已在View中拥有所需的数据,如何从那里完全创建图表?或者甚至更好,在模型中创建它并在视图中引用它?它应该是可能的,但我的谷歌搜索还没有成果。

这里有一些代码。

查看

<% foreach (ProjectEnrollment projectEnrollment in Model.ProjectEnrollments) { %>
    <img src='/pts/reports/Chart?year=<%= Model.Year %>&projectID=<%= projectEnrollment.ProjectID %>' alt="Chart"/>
<% } %>

控制器

 public FileResult Chart(string year, int projectID)
 {
ProjectEnrollment projectEnrollment = new ProjectTargetVsActualModel(year).ProjectEnrollments.SingleOrDefault(p => p.ProjectID == projectID);

if (projectEnrollment != null)
{
    Dictionary<string, IEnumerable<double>> data = new Dictionary<string, IEnumerable<double>>();
    data.Add("P", projectEnrollment.P.Select<int, double>(i => i).ToList());
    data.Add("Planned P", projectEnrollment.PlannedP.Select<int, double>(i => i).ToList());
    data.Add("S", projectEnrollment.S.Select<int, double>(i => i).ToList());
    data.Add("Planned S", projectEnrollment.PlannedS.Select<int, double>(i => i).ToList());
    ChartHelper ch = new ChartHelper();
    return ch.CreateChart(SeriesChartType.Line, 800, 300, null, projectEnrollment.Headers, data);
}

return null;
}

我知道这些代码片段中缺少很多细节。但我希望能够了解我目前的工作方式。

正如您所看到的,目前的设置非常低效。有没有办法只用一个Model实例就可以做到这一点?任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

图表对象可以使用SaveImage保存到MemoryStream中。 MemoryStreams可以用ToArray()输出为byte []。我做了所有这些并将byte []存储在模型中。

在视图中,字节[]可以显示为图像,如此。

<% var base64 = Convert.ToBase64String(projectEnrollment.Chart);
var imgSrc = String.Format("data:image/gif;base64,{0}", base64); %>
<img src="<%= imgSrc %>" alt="Chart"/>