我正在制作一个应用程序,该应用程序在加载 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
文件时自动完成的初始化。但我无法找到这到底是什么?