Question

J'utilise le Contrôles de création de graphiques ASP.Net et ASP.Net MVC.

J'essaie d'afficher un graphique sur une page. L'utilisateur peut modifier diverses données associées à ce graphique, puis appuyer sur un bouton permettant d'effectuer une opération POST, puis de renvoyer un graphique récemment rendu. Ceci est actualisé via jQuery qui charge une vue partielle contenant le graphique.

Le problème que je rencontre est que, dans Internet Explorer 7, je ne peux pas trouver l’image. Bizarrement cela fonctionne bien dans Firefox!

Processus de mise à jour du graphique:

  • Envoi de nouveaux paramètres dans un POST
  • L'application a modifié les paramètres de l'objet graphique
  • Le contrôleur envoie l'objet graphique à la vue partielle, ce qui le rend comme un contrôle
  • jQuery se charge ensuite dans cette vue partielle. Dans IE 7, j'obtiens l'icône image non trouvée.

Voici le code utilisé dans la vue partielle pour rendre l'objet graphique:

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

Salut!

Le jQuery qui charge ces graphiques est le suivant:

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");
   }
}
Était-ce utile?

La solution

Je pense que le problème est de savoir comment obtenir l'image. D'après le code que vous avez posté, il semble que vous obteniez les données d'image réelles via un téléchargement ajax, puis que vous insériez les nouvelles données d'image dans le DOM. Cela pourrait fonctionner pour Firefox, mais pas pour IE (P.S n’a jamais essayé non plus). Quoi qu'il en soit, en supposant que IE ne l'aime pas, il serait préférable de pointer l'image sur un gestionnaire d'images via l'attribut source de l'élément image. Lorsque vous devez modifier l'image, il vous suffit de modifier les paramètres dans l'URL envoyée au gestionnaire. Lorsque cela change, IE et Firefox font tous les deux une demande pour la nouvelle image. Par exemple:

Le code HTML

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

Le contenu de jQuery lorsque vous devez mettre à jour le graphique:

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

Autres conseils

vous pouvez écrire un service pour nettoyer les images datant de x jours ou vous pouvez utiliser #SEQ (maxFiles, minutes) pour définir l'expiration, mais le nommage n'est pas très flexible.

Je l'ai obtenu en modifiant ImageStorageMode en:

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

mais maintenant, il traîne dans un dossier. Je ne veux pas d'un dossier encombré d'images ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top