我在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()?任何建议表示赞赏。
答案 0 :(得分:0)
确保JQuery没有缓存结果,在你的ajax方法上,输入以下内容:
$.ajax({
cache: false
....
});
答案 1 :(得分:0)
好的,最后是预感,我做了以下更改:
public WebImage MyChart()
{
// same as before
...
return chart.ToWebImage();
}
猜猜这是什么,MVC的视图引擎认识到图表对象需要更新。 Chart对象有一个Write()方法可以写入自己的内部结构(以某种方式可以作为html的图像使用),而ToWebImage()可以显式写入html可以完全相同的方式使用的结构..不同之处在于后者知道要更新。去图。
我希望这有助于某人。