我对ASP.NET的了解非常有限且是新的,所以请更正我无法理解的任何内容。
我目前正在使用Google Charts生成一组图表,但每次我都在查询数据库中的同一组数据。我想将其存储在某处或仅检索一次数据以提高性能。
我查看了缓存,但每次我的脚本移动到下一个图表时,数据都不再存在于缓存中。所以我的另一个想法是获取数据一次,为所有图表生成JSON字符串,并将它们存储在模型中。然后我可以通过'Model.chart1 - Model.chart2'等获得数据。
但是,我似乎无法在我的视图中从Javascript访问此数据。我可以通过将'@ Model.chart1'放在div容器中来从html到达那里。
所需的行为是从JQuery函数内部访问此数据,如下所示。但是不是从控制器调用方法,而是直接访问模型字段,如'var chart1 = @ Model.chartOne'
<script type="text/javascript">
google.charts.load('current', { 'packages': ['corechart'] });
google.charts.setOnLoadCallback(drawChartOne);
google.charts.setOnLoadCallback(drawChartTwo);
function drawChartOne() {
var jsonData = $.ajax({
url: "/Controller/GetChartOne",
dataType: "json",
async: false
}).responseText;
var options = {
title: 'Chart One',
hAxis: {
title: 'Date'
},
vAxis: {
title: 'Hours'
},
explorer: {
keepInBounds: true
},
height: 500,
width: 1000
};
var data = new google.visualization.DataTable(jsonData);
var chart = new google.visualization.LineChart(document.getElementById('ChartOne'));
chart.draw(data, options);
}
function drawChartTwo() {
var jsonData = $.ajax({
url: "/Controller/GetChartTwo",
dataType: "json",
async: false
}).responseText;
var options = {
title: 'Chart Two',
hAxis: {
title: 'Date'
},
vAxis: {
title: 'Hours'
},
explorer: {
keepInBounds: true
},
height: 500,
width: 1000
};
var data = new google.visualization.DataTable(jsonData);
var chart = new google.visualization.LineChart(document.getElementById('ChartTwo'));
chart.draw(data, options);
}
</script>
答案 0 :(得分:0)
我通过一些关于正确使用MVC的阅读和教育来解决这个问题。
我最终创建了一个名为&#34; Graph&#34;的基础模型类,然后是GraphOne和GraphTwo的另外两个模型,它们都继承自Graph。
然后我创建了一个ViewModel,它存储了一个Graph类型的列表。这意味着我可以将所有不同的图形存储在一个列表中,以便从JavaScript中进行访问。
从控制器,根据请求,我可以加载一次数据,然后将数据传递给每个GraphOne和GraphTwo进行各自的处理。重要的是,只加载一次数据。然后我将ViewModel作为ActionResult返回,然后可以使用.cshtml类中的强类型数据类型访问我需要的属性。
可能是一个非常糟糕的解释,但希望它会帮助某人。我在ASP MVC上找到一个不错的教程有点困难。这是我遵循的非常好的系列,并建议: http://www.codeproject.com/Articles/866143/Learn-MVC-step-by-step-in-days-Day