2016-04-25 12 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

相關問題