0

Javascript では、データ テーブルからデータを取得し、それを javascriptSerializer に変換する関数を呼び出しています。次に、そのデータを Javascript チャートで使用します。最初はすべて正常に動作し、日付などのデータセット選択パラメータを変更し、関数 PopulateChart() を再度呼び出して新しいデータ セットを取得しようとすると、javascript での取得に問題が発生します。サーバーではデータと json 文字列が正しく設定されていますが、クライアントでは設定されていません。データの古い文字列がまだ存在しています。

var chartData は、返された serializer.Serialize(rows) がサーバー上の正しいデータを表示しても、古いデータを引き続き表示します

以下は私のコードと私が達成しようとしていることです。

ASPX

                var chartData = <%= PopulateChart() %>;

VB

            Public Function PopulateChart() As String

                ''Get Chart Data
                Dim daChart As New dsSVTableAdapters.clsChart
                Dim dtChart As New dsSV.webV1_ChartsDataTable
                Dim drChart As dsSV.webV1_ChartsRow

                dtChart = daChart.GetChart(hChartID.Value)

                If dtChart.Rows.Count > 0 Then

                    drChart = dtChart.Rows(0)
                    hChartName.Value = drChart.Description

                    HInterval.Value = drChart.Interval
                    Dim dtData As DataTable
                    Dim ds As New DataSet()
                    ds = GetData(4, DateTime.Parse("2012-05-01"), DateTime.Parse("2012-06-30"))
                    dtData = ds.Tables(0)

                    Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
                    Dim rows As New List(Of Dictionary(Of String, Object))

                    Dim row As Dictionary(Of String, Object)

                    For Each dr As DataRow In dtData.Rows
                        row = New Dictionary(Of String, Object)
                        For Each col As DataColumn In dtData.Columns
                            If col.ColumnName = "DateAndTime" Then
                                Dim dts As DateTime = DateTime.Parse(dr(col).ToString())
                                row.Add(col.ColumnName, dts.ToString("yyyy-MM-dd hh:mm:ss"))
                            ElseIf col.ColumnName = "Time" Then
                                Dim ts As DateTime = DateTime.Parse(dr(col).ToString())
                                row.Add(col.ColumnName, ts.ToString("hh:mm:ss"))
                            Else
                                row.Add(col.ColumnName, dr(col))
                            End If
                        Next
                        rows.Add(row)
                    Next

                    serializer.MaxJsonLength = Int32.MaxValue


                    Return serializer.Serialize(rows)
                End If

            End Function
4

1 に答える 1

1

var chartData = <%= PopulateChart() %>;は、ページの読み込みごとにサーバー側でのみ評価されます。これは、ページ リクエストがあった場合にのみ、ウェブページのコンテンツをレンダリングするため<%=....%>asp.netラッパーです。クライアント側の JavaScript で PopulateChart() 関数を使用できるようにはなりません。

ajax を呼び出すか、ロードするデータを示すリクエスト パラメータを指定してページ全体をリロードすることにより、新しいデータをロードする必要があります。

ここでは、jquery を使用した asp.net と ajax に関する codeproject の記事を示します。

http://www.codeproject.com/Articles/17203/Using-jQuery-for-AJAX-in-ASP-NET

于 2012-11-29T19:26:23.330 に答える