2009-10-21 9 views
0

J'utilise les ASP.Net Charting Controls et ASP.Net MVC. J'essaie d'avoir un graphique affiché sur une page, l'utilisateur peut changer diverses données associées à ce tableau, puis appuyez sur un bouton qui va effectuer une opération POST, puis retourner un graphique nouvellement rendu. Ceci est actualisé via jQuery qui charge une vue partielle contenant le graphique.Graphiques ASP.Net - L'obtention via jQuery sur IE 7 provoque le chargement de l'image

Le problème que j'ai est que dans IE 7 je reçois l'icône n'a pas pu être trouvé. Bizarrement ça fonctionne très bien dans Firefox!

Le processus de carte mise à jour:

  • Envoyer de nouveaux paramètres dans un POST
  • application a changé les paramètres de l'objet graphique
  • Controller envoie objet graphique à la vue partielle qu'elle rend comme un contrôle
  • jQuery se charge ensuite dans cette vue partielle. Dans IE 7 je reçois l'icône image non trouvée.

Voici le code utilisé dans la vue partielle pour rendre le graphique Objet:

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!

Le jQuery qui charge ces cartes est la suivante:

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"); 
    } 
} 
+0

Que fait réellement 'Chart.RenderControl'? Créer l'image dans un dossier et rendre une balise html 'img' pointant dessus? PS. l'affichage de la fonction jQuery serait utile. –

+0

Ajout du jQuery. Stepping semble bien fonctionner. Il génère une image comme celle-ci: http: // localhost: 2440/ChartImg.axd? [LongNumberString] – Damien

Répondre

1

Je pense que le problème est de savoir comment vous obtenez l'image. À partir du code que vous avez posté, il semble que vous obteniez les données d'image réelles via un téléchargement ajax puis en insérant 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). De toute façon, en supposant que IE n'aime pas cela, il serait préférable de pointer l'image sur un gestionnaire d'image via l'attribut source de l'élément image. Lorsque vous avez besoin de changer l'image il suffit de changer les paramètres dans l'url envoyé au gestionnaire, lorsque cela change IE et Firefox vont tous deux faire une demande pour la nouvelle image. Par exemple:

Le code HTML

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

Le de jQuery lorsque vous avez besoin de mettre à jour le tableau:

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

Eh bien j'obtiens une nouvelle vue partielle qui retourne un morceau de html. Y compris un tag d'image. – Damien

+0

Aussi.Les paramètres ne sont pas contenus dans l'URL. Les paramètres sont ajoutés à l'objet, puis l'objet à envoyer à une vue qui le rend. J'insère ensuite ce HTML. – Damien

+0

Pourriez-vous donner plus d'informations sur le RenderType? À quoi cela sert-il? À quoi sert le ImageStorageMode? –

0

Je l'ai travail en changeant ImageStorageMode à:

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

mais maintenant il traîne dans un dossier. Je ne veux pas un dossier qui se bouchera avec des images ...

0

vous pouvez écrire un service pour nettoyer les images qui sont x jours ou vous pouvez utiliser #SEQ (maxFiles, minutes) pour définir l'expiration mais c'est pas vraiment flexible avec le nommage.