确保每当调用 PartialView 时调用视图控制器方法来获取最新的图表数据

Ensuring view controller method to get latest chart data is called whenever PartialView called

我正在使用 Web.Helpers 中的图表来呈现视图的图表。该视图的数据集可以按类型区分为子集,该视图允许用户select一个类型。

包含此图 (_Chart.schtml) 的我的 razor 视图很简单:

<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 来捕获用户在类型 selection 中的更改,并在 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 可以以完全相同的方式使用。不同之处在于后者知道要更新。去图吧。

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