确保每当调用 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 可以以完全相同的方式使用。不同之处在于后者知道要更新。去图吧。
我希望这对某人有所帮助。
我正在使用 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 可以以完全相同的方式使用。不同之处在于后者知道要更新。去图吧。
我希望这对某人有所帮助。