确保在调用 Partial View 时调用用于获取最新图表数据的视图控制器方法



我在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()?任何建议表示赞赏。

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

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

好的,终于有了预感,我做了以下更改:

public WebImage MyChart()
{
  // same as before
  ...
  return chart.ToWebImage();
}

猜猜看,MVC 的视图引擎需要什么才能识别出图表对象需要更新。Chart 对象有一个 Write() 方法来写入它自己的内部结构(以某种方式作为 html 的图像提供),以及 ToWebImage() 显式写入 html 可以以完全相同的方式使用的结构。不同之处在于后者知道更新。去图。

我希望这对某人有所帮助。

最新更新