我正在使用 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 模型),其中包含大量计算的结果,以及一些“汇总”行(总计、平均值等)
View 将结果 (ViewModel) 显示为表格。
要求:
单击其中一个摘要行,打开显示该摘要行图表的模式窗口。
出于两个原因,希望避免发送 ViewModel 的参数并从头开始重新生成它(再次进行所有计算等)
1)后端数据库中的数字可能已经改变......所以图表不反映表格中显示的内容。
2) 计算需要时间!
我还想仅在单击该行时生成图表,而不是始终加载图表并使用 jquery 进行 hide() show() 。
我考虑过 ajax 调用,但不确定如何返回图像或如何打开新页面。
看不到在 Url.Action() 方法中传递复杂模型的方法。
认为缓存可能是最好的选择,并让 click 方法为新窗口调用“老式”javascript,传递参数以从缓存中获取对象?