FileStreamResult(またはFileResult)メソッドを使用して、(コントローラーアクションからの)かみそりビューページにグラフを表示していますが、これは期待どおりに機能します。
ただし、html要素をクリックした場合にのみグラフを表示できるのではないかと思います。
たとえば、要素をクリックして、モーダルポップアップでグラフを表示します。
Jqueryを使用して表示するモーダルを取得できます...ただし、チャートをdivに既にロードしている場合に限ります。
(パフォーマンス上の理由から)グラフなしでページを読み込み、クリックしたときにのみグラフを生成/読み込みしたいのですが。
なんらかのAjax呼び出しが必要だと思います...しかし、続行する方法については少し行き詰まっており、グーグルは有用なものを何も返しませんでした(写真のライトボックスのみ)
擬似コード:
HTML:
<img src='small chart icon.jpg' alt='click me to see chart' id='showchart'/>
<div>
rest of page goes here...
</div>
C#:
public FileStreamResult GetChart(){
//generate any chart
return FileStreamResult(newchartstream, "image/png");
}
JS:
<script>
$(document).ready(function(){
$('#showchart').click(function(){
//make ajax call to generate chart
//show in modal with "close" button
//OR
//open a new page as a modal?
});
});
</script>
編集
明確化:
コントローラは、多くの計算の結果といくつかの「要約」行(合計、平均など)を含むViewModel(EF4モデルから)を生成します
ビューは結果(ViewModel)をテーブルとして表示します。
要件:
要約行の1つをクリックすると、その要約行のグラフを表示するモーダルウィンドウが開きます。
2つの理由から、ViewModelのパラメーターを送信して最初から再生成する(すべての計算を再度実行するなど)ことを避けたい
1)バックエンドデータベースの数値が変更されている可能性があります...そのため、グラフには表に表示されている内容が反映されていません。
2)計算には時間がかかります!
また、チャートを常にロードしてjqueryでhide()show()を実行するのではなく、行がクリックされた場合にのみチャートを生成したいと思います。
ajax呼び出しについて考えましたが、画像を返す方法や、新しいページを開く方法がわかりません。
Url.Action()メソッドで複雑なモデルを渡す方法がわかりません。
キャッシュが最良のオプションであると考え、クリックメソッドで新しいウィンドウの「昔ながらの」JavaScriptを呼び出し、パラメータを渡してキャッシュからオブジェクトを取得しますか?