Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC3 razor视图中渲染MSChart_Asp.net Mvc 3_Charts_Mschart_Razor - Fatal编程技术网

Asp.net mvc 3 在MVC3 razor视图中渲染MSChart

Asp.net mvc 3 在MVC3 razor视图中渲染MSChart,asp.net-mvc-3,charts,mschart,razor,Asp.net Mvc 3,Charts,Mschart,Razor,我有一个显示MVC3网页图表的典型设置- 下面是所有组件的代码 控制器代码: 视图模型: 图表生成器: 这将填充视图模型 private List<Chart> BuildCharts(List<Dummy> chartData) { var charts = new List<Chart>(); foreach (Dummy chart in chartData) { chart

我有一个显示MVC3网页图表的典型设置-

下面是所有组件的代码

控制器代码: 视图模型: 图表生成器: 这将填充视图模型

private List<Chart> BuildCharts(List<Dummy> chartData)
    {
        var charts = new List<Chart>();
        foreach (Dummy chart in chartData)
        {
            charts.Add(BuildChart(chart));
        }

        return charts;
    }

    private Chart BuildChart(Dummy chartData)
    {
        var data = new ChartData
        {
            Title = "Chart X",
            xValues = chartData.hours,
            yValues = chartData.values
        };

        return ConfigureChart(data);
    }

    private Chart ConfigureChart(ChartData data)
    {
        Chart chart = new Chart(); 
        chart.Width = 150; 
        chart.Height = 300; 
        chart.Attributes.Add("align", "left"); 
        chart.Titles.Add(data.Title); 
        chart.ChartAreas.Add(new ChartArea());
        chart.Series.Add(new Series());
        chart.Legends.Add(new Legend("XXXX_YYY"));
        chart.Legends[0].TableStyle = LegendTableStyle.Auto;
        chart.Legends[0].Docking = Docking.Bottom;
        chart.Series[0].ChartType = SeriesChartType.Line;

        chart.Series[0].BackGradientStyle = GradientStyle.DiagonalLeft;
        chart.Series[0].BackSecondaryColor = System.Drawing.Color.LightGray;

        for (int i = 0; i < data.xValues.Length; i++)     
        {        
            string x = data.xValues[i];
            decimal y = data.yValues[i];

            int ptIdx = chart.Series[0].Points.AddXY(x, y);

            DataPoint pt = chart.Series[0].Points[ptIdx];
            pt.Url = "/Instance/Index/";
            pt.ToolTip = "Tooltip";
            pt.LegendText = "#VALX: #VALY";
            pt.LegendUrl = "/Contact/Details/";
            pt.LegendToolTip = "Click to view dummy information...";
        }

        return chart; 
    }
私有列表构建图表(列表图表数据)
{
var charts=新列表();
foreach(chartData中的虚拟图表)
{
添加(BuildChart(chart));
}
收益表;
}
私有图表构建图表(虚拟图表数据)
{
var数据=新图表数据
{
Title=“图表X”,
xValues=chartData.hours,
yValues=chartData.values
};
返回配置图(数据);
}
专用图表配置图表(图表数据)
{
图表=新图表();
图表宽度=150;
图表高度=300;
图表。属性。添加(“对齐”、“左”);
图表.标题.添加(数据.标题);
添加(new ChartArea());
chart.Series.Add(新系列());
图表.图例.添加(新图例(“XXXX_YYY”);
chart.Legends[0].TableStyle=LegendTableStyle.Auto;
图表图例[0]。停靠=停靠。底部;
chart.Series[0]。ChartType=SerieChartType.Line;
chart.Series[0]。BackGradientStyle=GradientStyle.DiagonalLeft;
chart.Series[0]。BackSecondaryColor=System.Drawing.Color.LightGray;
对于(int i=0;i
但是,视图中的代码-@图表不会呈现图表。我在页面中得到的是一个字符串“System.Web.UI.DataVisualization.Charting.Chart”来代替图表图像

有人能告诉我这里出了什么问题吗。如何在视图上输出图表

谢谢

你不能这样做:

@chart
Asp.NETMVC不知道如何呈现这些。您可以做的是将每个图表请求为图像。所以请跟随


您还应将“选项A”或“选项B”部分移至。

John,感谢您提供教程链接。我会尝试“选项B”,因为它似乎更适合我的情况。我不知道这个教程如何使用Razor视图引擎。这对您有用吗?使用不同的视图引擎并没有什么不同。我认为您只需要像这样包装代码
@{…code…}
@foreach (System.Web.UI.DataVisualization.Charting.Chart chart in Model.Charts)
{
    @chart
}
private List<Chart> BuildCharts(List<Dummy> chartData)
    {
        var charts = new List<Chart>();
        foreach (Dummy chart in chartData)
        {
            charts.Add(BuildChart(chart));
        }

        return charts;
    }

    private Chart BuildChart(Dummy chartData)
    {
        var data = new ChartData
        {
            Title = "Chart X",
            xValues = chartData.hours,
            yValues = chartData.values
        };

        return ConfigureChart(data);
    }

    private Chart ConfigureChart(ChartData data)
    {
        Chart chart = new Chart(); 
        chart.Width = 150; 
        chart.Height = 300; 
        chart.Attributes.Add("align", "left"); 
        chart.Titles.Add(data.Title); 
        chart.ChartAreas.Add(new ChartArea());
        chart.Series.Add(new Series());
        chart.Legends.Add(new Legend("XXXX_YYY"));
        chart.Legends[0].TableStyle = LegendTableStyle.Auto;
        chart.Legends[0].Docking = Docking.Bottom;
        chart.Series[0].ChartType = SeriesChartType.Line;

        chart.Series[0].BackGradientStyle = GradientStyle.DiagonalLeft;
        chart.Series[0].BackSecondaryColor = System.Drawing.Color.LightGray;

        for (int i = 0; i < data.xValues.Length; i++)     
        {        
            string x = data.xValues[i];
            decimal y = data.yValues[i];

            int ptIdx = chart.Series[0].Points.AddXY(x, y);

            DataPoint pt = chart.Series[0].Points[ptIdx];
            pt.Url = "/Instance/Index/";
            pt.ToolTip = "Tooltip";
            pt.LegendText = "#VALX: #VALY";
            pt.LegendUrl = "/Contact/Details/";
            pt.LegendToolTip = "Click to view dummy information...";
        }

        return chart; 
    }
@chart