2016-04-25 11 views
1

Web.HelpersのChartを使用してビューのグラフを描画しています。このビューのデータセットは、タイプによってサブセットに区別することができ、ビューではユーザーがタイプを選択できます。PartialViewが呼び出されるたびにView Controllerメソッドが最新のチャートデータを取得するようにします。

このグラフを含むマイカミソリビュー(_Chart.schtml)が単純である:

<p> 
<img src="/MyController/MyChart" /> 
</p> 

コントローラコード(簡体字)、親ビューのCSHTMLで

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"); 
} 

、私がキャッチするのjQueryを使用しユーザのタイプ選択の変更、およびajaxのMyController/ObjectListへの呼び出しを呼び出します。

ビューが最初に読み込まれると、グラフが正しくレンダリングされます。ただし、ユーザーが呼び出す型の変更により、ObjectListへの後続の呼び出し(期待どおり)が発生しますが、MyChart()は初めて初めて呼び出されます。

PartialView( "_ Chart")が呼び出されるたびにMyChart()が再度呼び出されるようにするために必要なことは何ですか?任意の提案が高く評価されました。

答えて

0

さて、最後に勘に、私は次の変更を加えた:

public WebImage MyChart() 
{ 
    // same as before 
    ... 

    return chart.ToWebImage(); 
} 

MVCのビューエンジンがチャートオブジェクトの更新が必要であることを認識するためには、何が必要なのかを推測してください。 Chartオブジェクトには、独自の内部構造に書き込むためのWrite()メソッド(HTMLにイメージとして利用できるようにする)と、ToWebImage()を使用して、HTMLがまったく同じ方法で使用できる構造体に明示的に書き込む..違いは、後者は更新されることを知っていることです。 Go figure。

私はこれが誰かを助けてくれることを願っています。

0

は、以下を入れて、jQueryのは、あなたのAjaxの方法で、結果をキャッシュされていないことを確認してください:

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

ご報告いただきありがとうございます!ただし、cache:falseは既に設定されており、結果には影響しません。 – ltree

関連する問題