2016-04-19 9 views
0

私のASP.NETに関する知識は非常に限られており、新しいものではありません。モデル内のデータにアクセスするにはJavaScriptを使用してください

私は現在、Google Chartsを使用してグラフのコレクションを生成していますが、同じデータセットをデータベースにクエリするたびにそのコレクションを生成しています。私はこれをどこかに保存したい、またはパフォーマンスを向上させるために一度だけデータを取得したい。

私はキャッシングを検討しましたが、スクリプトが次のチャートに移動するたびに、データはキャッシュに残りませんでした。だから私の他のアイデアは、一度データを取得し、すべてのチャートのJSON文字列を生成し、モデルに格納することでした。 'Model.chart1 - Model.chart2'などのデータを取得することができました。

しかし、私の見解では、このデータをJavascriptからアクセスできないようです。私はHTMLからそこに '@ Model.chart1'をdivコンテナの中に置くことでできるようになりました。

希望する動作は、以下に示すようにJQuery関数内からこのデータにアクセスすることです。しかし、だけではなく、直接「VARグラフ1 = @ 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

のようなモデルのフィールドにアクセスし、コントローラからメソッドを呼び出すので、私はMVCの適切な使用について少しアップ読書と教育でこれを解決しました。

グラフから継承したGraphOneとGraphTwoの2つのモデルを作成しました。

次に、Graphのタイプのリストを格納したViewModelを作成しました。これは、JavaScript内からアクセスするために、すべての異なるグラフを1つのリストに保存できることを意味していました。

コントローラからは、要求に応じてデータを一度ロードしてから、それぞれのGraphOneとGraphTwoにデータを渡して、それぞれの処理を行うことができます。重要なのは、データを一度だけロードすることです。その後、ViewModelをActionResultとして返し、.cshtmlクラスの中から強く型付けされたデータ型を使用して必要なプロパティにアクセスすることができました。

おそらく非常に貧弱な説明ですが、うまくいけば誰かを助けるでしょう。私はASP MVCに関するまともなチュートリアルを見つけるのに苦労しました。私が追ってきたとても良いシリーズです。 http://www.codeproject.com/Articles/866143/Learn-MVC-step-by-step-in-days-Day

関連する問題