J'utilise Chart dans Web.Helpers pour générer des graphiques pour une vue. L'ensemble de données pour cette vue peut être distingué par type en sous-ensembles, et la vue permet à l'utilisateur de sélectionner un type.L'utilisation de la méthode du contrôleur de vue pour obtenir les dernières données de graphique est appelée chaque fois que PartialView est appelé
Mon point de vue de rasoir contenant ce graphique (_Chart.schtml) est simplement:
<p>
<img src="/MyController/MyChart" />
</p>
Le code du contrôleur (simplifié)
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");
}
Dans cshtml de la vue parent, j'utilise jquery pour attraper le changement de l'utilisateur dans la sélection du type et invoquer l'appel à MyController/ObjectList dans ajax.
Le graphique s'affiche correctement lorsque la vue est chargée pour la première fois. Toutefois, les modifications de type invoquées par l'utilisateur entraînent un appel ultérieur à ObjectList (comme prévu), mais MyChart() ne sera jamais appelé à nouveau après la première fois.
Tout ce que je devrais faire pour m'assurer que MyChart() est appelé à chaque fois que PartialView ("_ Chart") est appelé? Toutes les suggestions ont apprécié.
Merci pour le rappel! Cependant, le cache: false a déjà été défini et n'affecte pas le résultat. – ltree