ASP.Net Charts - получение через jQuery в IE 7 приводит к тому, что изображение не загружается - PullRequest
0 голосов
/ 21 октября 2009

Я использую ASP.Net Charting Controls и ASP.Net MVC.

Я пытаюсь отобразить диаграмму на странице, пользователь может изменить различные данные, связанные с этой диаграммой, а затем нажать кнопку, которая выполнит операцию POST, а затем вернет вновь созданную диаграмму. Это обновляется через jQuery, который загружает частичное представление, содержащее диаграмму.

Проблема, с которой я столкнулся, заключается в том, что в IE 7 изображение не может быть найдено. Причудливо это работает отлично в Firefox!

Процесс обновления графика:

  • Отправка новых параметров в POST
  • Приложение изменило параметры на объекте диаграммы
  • Контроллер отправляет объект Chart в частичное представление, которое отображает его как элемент управления
  • 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");
   }
}

Ответы [ 3 ]

1 голос
/ 21 октября 2009

Я думаю, проблема в том, как вы получаете изображение. Из кода, который вы разместили, похоже, что вы получаете фактические данные изображения через ajax-загрузку, а затем вставляете новые данные изображения в DOM. Это может работать для Firefox, но не для IE (P.S тоже никогда не пробовал). В любом случае, если предположить, что 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);
}
0 голосов
/ 26 января 2011

вы можете написать сервис для очистки изображений, которым x дней, или вы можете использовать #SEQ (maxFiles, минуты), чтобы установить срок действия, но это не очень гибко с именами.

0 голосов
/ 21 октября 2009

Я заработал, изменив ImageStorageMode на:

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

но теперь он висит в папке. Я не хочу, чтобы папка была забита изображениями ...

...