ASP.Net Диаграммы - Получение с помощью jQuery в IE 7 приводит к тому, что изображение не загружается

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

Вопрос

Я использую ASP.Net Элементы управления построением графиков и ASP.Net MVC.

Я пытаюсь отобразить диаграмму на странице, пользователь может изменить различные данные, связанные с этой диаграммой, а затем нажать кнопку, которая выполнит операцию POST, а затем вернет только что отрисованную диаграмму.Это обновляется с помощью 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 (P.S тоже никогда не пробовал).В любом случае, предполагая, что IE это не нравится, было бы лучше указать изображение на обработчик изображений через атрибут source элемента image.Когда вам нужно изменить изображение, просто измените параметры в 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