2009-10-21 4 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' 태그를 렌더링 하시겠습니까? 추신. jQuery 함수를 게시하면 도움이 될 것입니다. –

+0

jQuery를 추가했습니다. 스테핑은 잘 작동하는 것 같습니다. http : // localhost : 2440/ChartImg.axd? [longNumberString] – Damien

답변

1

난 당신이 이미지를 얼마나 문제라고 생각합니다. 게시 한 코드에서 아약스 다운로드를 통해 실제 이미지 데이터를 얻은 다음 새 이미지 데이터를 DOM에 삽입하는 것처럼 보입니다. Firefox에서는 작동하지만 IE에서는 작동하지 않을 수 있습니다 (P는 절대로 시도하지 않았습니다). 어쨌든 IE가 이것을 좋아하지 않는다고 가정하면 image 요소의 source 속성을 통해 이미지 핸들러에서 이미지를 가리키는 것이 더 낫습니다. 이미지를 변경해야하는 경우 처리기로 보내지는 url의 매개 변수를 변경하면 IE와 Firefox가 둘 다 새 이미지를 요청할 때 변경됩니다. 예를 들면 :

html로

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

다음은 차트 업데이트해야 할 때 jQuery를에서 :

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

: 나는에 ImageStorageMode을 변경하여 작업을 얻었다

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

을 하지만 이제는 폴더에 매달려 있습니다. 폴더가 이미지로 막히는 것을 원하지 않습니다 ...

0

x 일이 지난 이미지를 정리하는 서비스를 작성할 수 있으며 #SEQ (maxFiles, minutes)를 사용하여 만료를 설정할 수 있지만 그럴 수 있습니다. 정말 유연한 이름 지정이 아닙니다.

관련 문제