0

我正在使用ASP.Net Charting Controls和 ASP.Net MVC。

我试图在页面上显示一个图表,用户可以更改与此图表关联的各种数据,然后按下一个按钮,该按钮将执行 POST 操作,然后返回一个新呈现的图表。这是通过 jQuery 刷新的,它加载包含图表的部分视图。

我遇到的问题是在 IE 7 中我得到了无法找到图像的图标。奇怪的是它在 Firefox 中运行良好!

更新图表的过程:

  • 在 POST 中发送新参数
  • 应用程序更改图表对象上的参数
  • 控制器将图表对象发送到局部视图,使其像控件一样呈现
  • jQuery 然后在这个局部视图中加载。在 IE 7 中,我得到未找到图像的图标。

以下是部分视图中用于呈现图表对象的代码:

if (Model.Chart != null)
        {
            Model.Chart.Page = this.Page;
            System.Web.UI.DataVisualization.Charting.Chart Chart1 = Model.Chart;
            using (HtmlTextWriter writer = new HtmlTextWriter(this.Response.Output))
            {
                try
                {

                    Chart1.ImageType = System.Web.UI.DataVisualization.Charting.ChartImageType.Jpeg;
                    Chart1.RenderControl(writer);
                }
                catch (Exception ex)
                {
                    writer.WriteEncodedText(ex.Message);
                }
            }
        }

干杯!

加载这些图表的 jQuery 如下:

function PostWidgetDataOverride(ChartID) {
    $.ajax({
        url: "/Home/GetChart",
        type: "POST",
        dataType: "HTML",
        data: { ChartID: ChartID, SeriesID: $('.SeriesID').val(), ParameterDefaults: $('.parameterDefault').serialize(), Time: getTimeStamp() },
        success: UpdateChart
    });
}

function UpdateChart(ChartContent) {
   $("#widgetConfig").dialog("close");
   var existingChart = CheckIfWidgetIsOnPage($(ChartContent).attr("id"))

   if (existingChart !== undefined) {
       existingChart.fadeOut("slow", function() { existingChart.replaceWith(ChartContent); }).fadeIn("slow");
   }
  else {
       $(ChartContent).appendTo($("#dashboardArea")).fadeIn("slow");
   }
}
4

3 回答 3

1

我认为问题在于如何获得图像。从您发布的代码看来,您正在通过 ajax 下载获取实际的图像数据,然后将新的图像数据插入 DOM。这可能适用于 Firefox,但不适用于 IE(PS 也从未尝试过)。无论如何,假设 IE 不喜欢这样,最好通过图像元素的源属性将图像指向图像处理程序。当您需要更改图像时,只需更改发送到处理程序的 url 中的参数,当此更改时,IE 和 Firefox 都会请求新图像。例如:

的HTML

<img src="./chart.aspx?SeriesId=456&ChartId=123&Time=20091021155300" id="chart" />

需要更新图表时来自 jQuery:

function UpdateChart(chartId, seriesId, time){
  $("#chart").attr("src","./chart.aspx?SeriesId="+seriesId+"&ChartId="+chartId+"&Time="+time);
}
于 2009-10-21T14:56:40.217 回答
0

我通过将 ImageStorageMode 更改为:

Chart1.ImageStorageMode = System.Web.UI.DataVisualization.Charting.ImageStorageMode.UseImageLocation

but now it hangs around in a folder. I don't want a folder clogging up with images...

于 2009-10-21T16:20:31.363 回答
0

you can write a service to clean up images which are x days old or you can use #SEQ(maxFiles,minutes) to set the expiration but that is not really flexible with naming.

于 2011-01-25T23:01:23.967 回答