Domanda

Sto usando Controlli grafici ASP.Net e ASP.Net MVC.

Sto cercando di visualizzare un grafico su una pagina, l'utente può modificare vari dati associati a questo grafico e quindi premere un pulsante che eseguirà un'operazione POST e quindi restituirà un grafico di nuovo rendering. Questo viene aggiornato tramite jQuery che carica una vista parziale contenente il grafico.

Il problema che sto riscontrando è che in Internet Explorer 7 non riesco a trovare l'icona. Stranamente funziona bene in Firefox!

Il processo di aggiornamento del grafico:

  • Invia nuovi parametri in un POST
  • Applicazione modificata parametri sull'oggetto grafico
  • Il controller invia l'oggetto grafico alla vista parziale che lo rende come un controllo
  • jQuery quindi si carica in questa vista parziale. In IE 7 ottengo l'icona immagine non trovata.

Ecco il codice utilizzato nella vista parziale per rendere l'oggetto grafico:

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);
                }
            }
        }

Cheers!

Il jQuery che carica questi grafici è il seguente:

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");
   }
}
È stato utile?

Soluzione

Penso che il problema sia come si ottiene l'immagine. Dal codice che hai pubblicato sembra che tu stia ottenendo i dati dell'immagine reale tramite un download Ajax e quindi inserendo i nuovi dati immagine nel DOM. Questo potrebbe funzionare per Firefox, ma non per IE (P.S non ha mai provato neanche). Supponendo comunque che a IE non piaccia, sarebbe meglio puntare l'immagine su un gestore di immagini tramite l'attributo source dell'elemento image. Quando è necessario modificare l'immagine, è sufficiente modificare i parametri nell'URL inviato al gestore, quando questo cambia IE e Firefox farà una richiesta per la nuova immagine. Ad esempio:

L'HTML

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

Il da jQuery quando è necessario aggiornare il grafico:

function UpdateChart(chartId, seriesId, time){
  $("#chart").attr("src","./chart.aspx?SeriesId="+seriesId+"&ChartId="+chartId+"&Time="+time);
}

Altri suggerimenti

puoi scrivere un servizio per ripulire le immagini che risalgono a x giorni fa oppure puoi usare #SEQ (maxFiles, minuti) per impostare la scadenza ma non è molto flessibile con la denominazione.

Ho funzionato cambiando ImageStorageMode in:

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

ma ora si blocca in una cartella. Non voglio che una cartella si ostruisca con le immagini ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top