Frage

Ich benutze das ASP.NET -Diagrammsteuerungen und ASP.NET MVC.

Ich versuche, ein Diagramm auf einer Seite anzuzeigen. Der Benutzer kann verschiedene Daten ändern, die diesem Diagramm zugeordnet sind, und dann eine Taste drücken, die einen Postoperation durchführt und dann ein neu gerenderter Diagramm zurückgibt. Dies wird über JQuery aktualisiert, das eine teilweise Ansicht mit dem Diagramm lädt.

Das Problem, das ich habe, ist, dass ich in IE 7 das Bild erhalte, nicht gefunden werden konnte. Bizarr funktioniert es gut in Firefox!

Der Prozess der Aktualisierung der Tabelle:

  • Senden Sie neue Parameter in einem Beitrag
  • Die Anwendung geänderte Parameter im Diagrammobjekt
  • Controller sendet ein Diagrammobjekt an eine Teilansicht, die es wie ein Steuerelement macht
  • JQuery lädt dann in dieser Teilansicht ein. In IE 7 bekomme ich das Bild nicht gefundenes Symbol.

Hier ist der Code, der in der Teilansicht verwendet wird, um das Diagrammobjekt zu rendern:

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

Prost!

Die jQuery, die diese Diagramme lädt, lautet wie folgt:

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");
   }
}
War es hilfreich?

Lösung

Ich denke, das Problem ist, wie Sie das Bild erhalten. Aus dem Code, den Sie gepostet haben, sieht es so aus, als würden Sie die tatsächlichen Bilddaten über einen AJAX -Download erhalten und dann die neuen Bilddaten in das DOM einfügen. Dies könnte für Firefox funktionieren, aber nicht für IE (PS hat es auch nie versucht). Wie auch immer, unter der Annahme, dass IE dies nicht mag, wäre es besser, das Bild über das Quellattribut des Bildelements auf einen Bildhandler zu richten. Wenn Sie das Bild ändern müssen, ändern Sie einfach die Parameter in der an Handler gesendeten URL, wenn sich dies ändert, dh und Firefox stellt beide eine Anfrage für das neue Bild. Zum Beispiel:

Die HTML

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

Die von jQuery, wenn Sie das Diagramm aktualisieren müssen:

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

Andere Tipps

Sie können einen Service schreiben, um Bilder zu beseitigen, die x Tage alt sind, oder Sie können #seq (maxFiles, Minuten) verwenden, um den Ablauf zu setzen, aber das ist nicht wirklich flexibel bei der Benennung.

Ich habe es zum Laufen gebracht, indem ich ImagestorageMode zu:

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

Aber jetzt hängt es in einem Ordner herum. Ich möchte nicht, dass ein Ordner mit Bildern verstopft ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top