只要PartialView调用,就会调用确保视图控制器方法获取最新的图表数据

时间:2016-04-25 18:18:53

标签: razor model-view-controller charts asp.net-webpages

我在Web.Helpers中使用Chart来渲染视图的图形。此视图的数据集可以按类型分为子集,视图允许用户选择类型。

包含此图表(_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()?任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

确保JQuery没有缓存结果,在你的ajax方法上,输入以下内容:

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

答案 1 :(得分:0)

好的,最后是预感,我做了以下更改:

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

  return chart.ToWebImage();
}

猜猜这是什么,MVC的视图引擎认识到图表对象需要更新。 Chart对象有一个Write()方法可以写入自己的内部结构(以某种方式可以作为html的图像使用),而ToWebImage()可以显式写入html可以完全相同的方式使用的结构..不同之处在于后者知道要更新。去图。

我希望这有助于某人。