2009-10-21 16 views
0

我使用的是ASP.Net Charting Controls和ASP.Net MVC。ASP.Net圖表 - 在IE 7上通過jQuery獲取導致圖像不加載

我想要在頁面上顯示圖表,用戶可以更改與此圖表相關的各種數據,然後按下執行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"); 
    } 
} 
+0

「Chart.RenderControl」實際上做了什麼?在文件夾中創建圖像並呈現指向它的html img'標籤? PS。發佈jQuery函數將有所幫助。 –

+0

添加了jQuery。雖然步進似乎工作正常。它生成一個像這樣的圖像:http:// localhost:2440/ChartImg.axd?[longNumberString] – Damien

回答

1

我認爲這個問題是你如何獲得圖像。從你發佈的代碼看,你通過ajax下載獲得實際的圖像數據,然後將新的圖像數據插入到DOM中。這可能適用於Firefox,但不適用於IE(P.S從未嘗試過)。無論如何,假設IE不喜歡這樣做,最好通過圖像元素的source屬性將圖像指向圖像處理程序。當您需要更改圖像時,只需更改發送給處理程序的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); 
} 
+0

嗯,我得到一個新的部分視圖返回一個HTML塊。包括圖片標籤。 – Damien

+0

另外。參數不包含在URL中。參數被添加到對象,然後將對象發送到呈現它的視圖。然後我插入該HTML。 – Damien

+0

你可以提供關於RenderType的更多信息嗎?這是什麼? ImageStorageMode設置爲什麼? –

0

我把它通過改變ImageStorageMode到工作:

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

但現在它掛在一個文件夾中。我不想要一個文件夾堵塞圖像...

0

你可以寫一個服務來清理x天的圖像,或者你可以使用#SEQ(maxFiles,分鐘)來設置過期,但這是命名不太靈活。