ASP.NET 차트 - IE 7의 jQuery를 통해 얻을 수 있습니다. 이미지가로드되지 않도록합니다.

StackOverflow https://stackoverflow.com/questions/1600974

문제

나는 그것을 사용하고있다 ASP.NET 차트 컨트롤 및 ASP.NET MVC.

페이지에 차트를 표시하려고 노력하고 있습니다. 사용자는이 차트와 관련된 다양한 데이터를 변경 한 다음 게시물 작업을 수행 한 다음 새로 렌더링 된 차트를 반환하는 버튼을 누를 수 있습니다. 이것은 차트가 포함 된 부분보기를로드하는 jQuery를 통해 새로 고침됩니다.

내가 가진 문제는 IE 7에서 이미지를 찾을 수 없다는 것입니다. 기괴하게 그것은 Firefox에서 잘 작동합니다!

차트 업데이트 프로세스 :

  • 게시물에 새 매개 변수를 보냅니다
  • 응용 프로그램이 차트 객체의 매개 변수를 변경했습니다
  • 컨트롤러는 차트 객체를 컨트롤처럼 렌더링하는 부분보기로 보냅니다.
  • 그런 다음 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");
   }
}
도움이 되었습니까?

해결책

문제는 이미지를 얻는 방법이라고 생각합니다. 게시 한 코드에서 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);
}

다른 팁

X 일의 이미지를 정리하는 서비스를 작성하거나 #Seq (maxfiles, minutes)를 사용하여 만료를 설정할 수 있지만 이름 지정에 실제로 유연하지는 않습니다.

ImageStoragemode를 다음과 같이 변경하여 작동했습니다.

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

그러나 이제는 폴더에 매달려 있습니다. 폴더가 이미지로 막히고 싶지 않습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top