我对这个图表事物不熟悉,而且我这样做的方式非常低效,所以我认为应该有更好的方法。
目前我有一个控制器,它创建一个模型,从数据库中提取所有数据,并进行大量的解析等,然后在视图中显示所有数据,数据在几个表中布局。
同样在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实例就可以做到这一点?任何建议将不胜感激。感谢。
答案 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"/>