ASP.NETMVC图表控件-创建多个图表
我想在控制器中动态创建多个图表。当我在for each中实例化一个新的图表控件时,它会呈现一个空白图表。我想知道可以做些什么来让我用下面的代码在一个页面上创建和填充多个图表ASP.NETMVC图表控件-创建多个图表,asp.net,asp.net-mvc,charts,Asp.net,Asp.net Mvc,Charts,我想在控制器中动态创建多个图表。当我在for each中实例化一个新的图表控件时,它会呈现一个空白图表。我想知道可以做些什么来让我用下面的代码在一个页面上创建和填充多个图表 public ActionResult BuildChart() { var chart = new System.Web.UI.DataVisualization.Charting.Chart() { Width = 576, Hei
public ActionResult BuildChart()
{
var chart = new System.Web.UI.DataVisualization.Charting.Chart()
{
Width = 576,
Height = 100,
BackColor = System.Drawing.Color.White,
};
GetPersonas();
GetSenarioVoting();
List<CIEToolRole.Models.ScenarioModel> scenarios = GetSenarioVotingResults();
int i = 0;
foreach (ScenarioModel scenario in scenarios)
{
chart = new System.Web.UI.DataVisualization.Charting.Chart()
{
Width = 576,
Height = 100,
BackColor = System.Drawing.Color.White,
};
chart.ID = "Chart" + i;
Series mySeries = new Series();
mySeries.ChartType = SeriesChartType.Column;
mySeries.BorderWidth = 1;
mySeries.Palette = ChartColorPalette.Chocolate;
mySeries.Name = "series" + i;
List<int> voteVal = scenario.Votes.Select(p => p.Value).ToList();
foreach (int vote in voteVal)
{
DataPoint point = new DataPoint();
point.YValues = new double[] { vote };
mySeries.Points.Add(point);
}
chart.Series.Add(mySeries);
i++;
}
ChartArea ca1 = new ChartArea("ca1");
ca1.BackColor = System.Drawing.Color.LightGray;
ca1.AxisY.LineColor = System.Drawing.Color.LightBlue;
chart.ChartAreas.Add(ca1);
var imgStream = new System.IO.MemoryStream();
chart.SaveImage(imgStream, ChartImageFormat.Png);
imgStream.Seek(0, System.IO.SeekOrigin.Begin);
return File(imgStream, "image/png");
}
public ActionResult BuildChart()
{
var chart=new System.Web.UI.DataVisualization.Charting.chart()
{
宽度=576,
高度=100,
背景色=System.Drawing.Color.White,
};
GetPersonas();
GetSenario投票();
列表场景=GetSenariovationResults();
int i=0;
foreach(场景中的场景模型场景)
{
chart=new System.Web.UI.DataVisualization.Charting.chart()
{
宽度=576,
高度=100,
背景色=System.Drawing.Color.White,
};
chart.ID=“chart”+i;
Series mySeries=new Series();
mySeries.ChartType=SerieChartType.Column;
mySeries.BorderWidth=1;
Palette=ChartColorPalette.Chocolate;
mySeries.Name=“series”+i;
List voteVal=scenario.vows.Select(p=>p.Value.ToList();
foreach(国际投票表决权)
{
数据点=新数据点();
point.YValues=新的双[]{vote};
mySeries.Points.Add(点);
}
chart.Series.Add(mySeries);
i++;
}
ChartArea ca1=新ChartArea(“ca1”);
ca1.BackColor=System.Drawing.Color.LightGray;
ca1.AxisY.LineColor=System.Drawing.Color.LightBlue;
图表。图表区域。添加(ca1);
var imgStream=new System.IO.MemoryStream();
SaveImage(imgStream,chartmageformat.Png);
imgStream.Seek(0,System.IO.SeekOrigin.Begin);
返回文件(imgStream,“image/png”);
}
经过反复试验,我终于想出了一个不需要局部视图的解决方案
控制器
public ActionResult BuildChart(int scenarioID)
{
var chart = new System.Web.UI.DataVisualization.Charting.Chart()
{
Width = 576,
Height = 100,
BackColor = System.Drawing.Color.White,
};
GetPersonas();
GetSenarioVoting();
List<modelstuff.Models.ScenarioModel> scenarios = GetSenarioVotingResults();
int x = 0;
var scenarioById = scenarios.FirstOrDefault(p => p.ID == scenarioID).Votes;
Series mySeries = new Series();
mySeries.ChartType = SeriesChartType.Column;
mySeries.BorderWidth = 1;
mySeries.Palette = ChartColorPalette.Chocolate;
// Making a unqiue series ID
Guid guido = new Guid();
mySeries.Name = guido.ToString();
foreach (int vote in scenarioById.Values)
{
DataPoint point = new DataPoint();
point.YValues = new double[] { vote };
mySeries.Points.Add(point);
}
chart.Series.Add(mySeries);
ChartArea ca1 = new ChartArea("ca1");
ca1.AxisX.LabelStyle.Enabled = false;
ca1.AxisY.LabelStyle.Enabled = false;
ca1.BackColor = System.Drawing.Color.LightGray;
ca1.AxisY.LineColor = System.Drawing.Color.LightBlue;
chart.ChartAreas.Add(ca1);
var imgStream = new System.IO.MemoryStream();
chart.SaveImage(imgStream, ChartImageFormat.Png);
imgStream.Seek(0, System.IO.SeekOrigin.Begin);
return File(imgStream, "image/png");
}
public ActionResult构建图(int scenarioID)
{
var chart=new System.Web.UI.DataVisualization.Charting.chart()
{
宽度=576,
高度=100,
背景色=System.Drawing.Color.White,
};
GetPersonas();
GetSenario投票();
列表场景=GetSenariovationResults();
int x=0;
var scenarioById=scenarios.FirstOrDefault(p=>p.ID==scenarioID);
Series mySeries=new Series();
mySeries.ChartType=SerieChartType.Column;
mySeries.BorderWidth=1;
Palette=ChartColorPalette.Chocolate;
//制作一个unqiue系列ID
Guid guido=新Guid();
mySeries.Name=guido.ToString();
foreach(scenarioById.Values中的int投票)
{
数据点=新数据点();
point.YValues=新的双[]{vote};
mySeries.Points.Add(点);
}
chart.Series.Add(mySeries);
ChartArea ca1=新ChartArea(“ca1”);
ca1.axix.LabelStyle.Enabled=false;
ca1.AxisY.LabelStyle.Enabled=false;
ca1.BackColor=System.Drawing.Color.LightGray;
ca1.AxisY.LineColor=System.Drawing.Color.LightBlue;
图表。图表区域。添加(ca1);
var imgStream=new System.IO.MemoryStream();
SaveImage(imgStream,chartmageformat.Png);
imgStream.Seek(0,System.IO.SeekOrigin.Begin);
返回文件(imgStream,“image/png”);
}
看法
foreach(ViewBag.Scenarios中的modelstuff.Models.ScenarioModel场景)
{ %>
foreach (modelstuff.Models.ScenarioModel scenario in ViewBag.Scenarios)
{ %>
<li class="<%= i % 2 == 0 ? "row" : "altRow" %>" data- rowid="<%= "scenario" + scenario.ID%>">
<div class="chartcol1">
<span class="charttoolTipTitle"><%= scenario.Name%></span>
</div>
<div class="chartcol">
<%= Html.Chart(
"BuildChart",
"Home",
new
{
scenarioID = scenario.ID
},
new
{
style = "width: 576px; height:100px;",
}) %>