ASP.Net Charts - получение с помощью jQuery в IE 7 приводит к тому, что изображение не загружается
Я использую ASP.Net Charting Controls и ASP.Net MVC.
Я пытаюсь отобразить диаграмму на странице, пользователь может изменить различные данные, связанные с этой диаграммой, а затем нажать кнопку, которая выполнит операцию POST, а затем вернет вновь созданную диаграмму. Это обновляется через jQuery, который загружает частичное представление, содержащее диаграмму.
У меня проблема в том, что в IE 7 я получаю изображение не может быть найдено значок. Причудливо это работает отлично в Firefox!
Процесс обновления графика:
- Отправить новые параметры в POST
- Приложение изменило параметры на объекте диаграммы
- Контроллер отправляет объект Chart в частичное представление, которое отображает его как элемент управления
- Затем jQuery загружается в этом частичном представлении. В IE 7 я получаю изображение не найден значок.
Вот код, используемый в частичном представлении для визуализации объекта Chart:
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 ответа
Я думаю, проблема в том, как вы получаете изображение. Из кода, который вы разместили, похоже, что вы получаете фактические данные изображения через 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
но теперь он висит в папке. Я не хочу, чтобы папка была забита изображениями...