2016-04-25 33 views
1

我在Web.Helpers中使用Chart来呈现视图的图形。这个视图的数据集可以通过类型区分为子集,并且该视图允许用户选择类型。确保视图控制器方法能够获取最新图表数据,只要PartialView调用

含有该图(_Chart.schtml)我的剃刀视图仅仅是:

<p> 
<img src="/MyController/MyChart" /> 
</p> 

控制器代码(简化的)

public void MyChart() 
{ 
    ChartSeries[] data = GetChartData(new string[] { _curChartDataType }); 
var chart = 
       new Chart(500, 200, ChartTheme.Green); 

        for (int i=0; i<data.Length; i++) { 
         title += data[i].name + " "; 
         chart.AddSeries(name: data[i].name, chartType: "Line",              
          xValue: data[i].xValue, xField: data[i].xField,     
          yValues: data[i].yValues, yFields: data[i].yFields); 
        } 
        chart.AddTitle(title) 
        .AddLegend() 
        .Write("png"); 
} 


public ActionResult ObjectList() 
{ 
      // irrelevant code removed 

      return PartialView("_Chart"); 
} 

在父视图的CSHTML,我使用jquery赶用户在类型选择中的改变,并调用Ajax中MyController/ObjectList的调用。

当第一次加载视图时,图呈现正确。但是,用户调用的类型更改会导致后续对ObjectList的调用(如预期的那样),但MyChart()在第一次后再也不会被调用。

任何我应该做的以确保每次调用PartialView(“_ Chart”)时都会再次调用MyChart()?任何建议感激。

回答

0

好了,终于在一个预感,我做了以下修改:

public WebImage MyChart() 
{ 
    // same as before 
    ... 

    return chart.ToWebImage(); 
} 

然后猜测MVC的视图引擎是如何认识图表对象需要更新的。 Chart对象有一个Write()方法来写入它自己的内部结构(它以某种方式作为html的图像),ToWebImage()显式地写入一个结构,html可以以完全相同的方式使用..区别在于后者知道要更新。去搞清楚。

我希望这可以帮助别人。

0

请确保jQuery是不缓存的结果,您的AJAX方法,把下面的:

$.ajax({ 
    cache: false 
.... 
}); 
+0

感谢您的提醒!但是,cache:false已经被设置,并且不会影响结果。 – ltree

相关问题