1

ASP.NET ページが読み込まれると、非常に重い (データの意味で) チャートがレンダリングされるアプリケーションを作成しています。このため、ページの読み込みに時間がかかり、白い画面が表示されます。チャートにDundasチャート API を使用しています。

回避策として、Ajax 呼び出し内でグラフを読み込もうとしています。このアプローチでは、ページ全体を一度にレンダリングし、レンダリングしたら、チャート コントロールのために Ajax 呼び出しをサーバーに送信します。

チャート コントロールをレンダリングするには、次のコードを使用しています

private string GetSummaryGraph()
    {
        Chart chart_analysis = new Chart();
        chart_analysis.ID = "chart_analysis_1";
        chart_analysis.BackColor = Color.Black;
        chart_analysis.EnableViewState = true;
        chart_analysis.Height = 217;
        chart_analysis.ImageStorageMode = ImageStorageMode.UseImageUrl;
        chart_analysis.ImageUrl = "~/MyApp/ChartImages/MyChart_#SEQ(1000,720)";
        chart_analysis.ImageType = ChartImageType.Png;
        chart_analysis.Palette = ChartColorPalette.Dundas;
        chart_analysis.ViewStateContent = SerializationContent.All;
        chart_analysis.Width = 996;

        // Set all styling here, like ChartAreas, Series.

        string chartImgURL = chart_analysis.GetCurrentImageUrl(); // this line throws exception "Object reference not set to instance of object"

        string html_chart = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        chart_analysis.RenderControl(htw);

        html_chart = sw.ToString();
        return html_chart;
}

何らかの理由で関数を呼び出すと、chart_analysis.GetCurrentImageUrl();次のスタックトレースで例外がスローされます

Object reference not set to an instance of an object.
at Dundas.Charting.WebControl.Chart.a(String )
   at Dundas.Charting.WebControl.Chart.GetCurrentImageUrl()
   at GetSummary.GetSummaryGraph() in D:\Projects\MyApp\GetSummary.aspx.cs:line 4492

ただし、グラフ コントロールをファイルで.aspxはなくページに配置する.aspx.csと、この関数は正常に機能します。

編集

を呼び出す前にコントロールをレンダリングしようとしましGetCurrentImageURL()たが、この場合も次の例外が発生します。

Object reference not set to an instance of an object.
   at Dundas.Charting.WebControl.Chart.a(String )
   at Dundas.Charting.WebControl.Chart.GetCurrentImageUrl()
   at Dundas.Charting.WebControl.Chart.Render(HtmlTextWriter output)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at GetSummary.GetSummaryGraph() in D:\Projects\MyApp\GetSummary.aspx:line 4494
   at GetSummary.LoadChartData() in D:\Projects\MyApp\GetSummary.aspx:line 4378

.aspxチャートがファイルに配置されたときに自動的に行われる初期化が欠落しているようです。しかし、これが正確に何であるかを見つけることができませんか?

4

1 に答える 1

1

このエラーが発生するのは、その時点でチャート コントロールがまだ実行されていないためです。

また、チャートコントロールを文字列に実行し、ページに直接実行しません。

2つの考えを検討してください。

コントロールをレンダリングした後、エーテルは現在の画像のURLを取得しようとしますが、コントロールは自動的にメモリに実行され、ページ上のポイントに配置する必要があるhtmlを取得するため、必要ありません。

いずれの場合でも、制御ステップを実行して、そのパラメーターを使用できるようにする必要があります。

于 2012-06-04T10:27:08.523 に答える