質問

ASP.Net Charting Controls およびASP.Net MVC。

ページにチャートを表示しようとしています。ユーザーはこのチャートに関連するさまざまなデータを変更し、POST操作を実行してから新しくレンダリングされたチャートを返すボタンを押すことができます。これは、グラフを含む部分ビューをロードするjQueryを介して更新されます。

私が抱えている問題は、IE 7ではアイコンが見つからないということです。奇妙なことに、Firefoxで正常に動作します!

チャートを更新するプロセス:

  • POSTで新しいパラメーターを送信
  • チャートオブジェクトのアプリケーション変更パラメーター
  • コントローラーはChartオブジェクトをコントロールのようにレンダリングする部分ビューに送信します
  • 次に、
  • jQueryはこの部分ビューでロードします。 IE 7では、画像が見つからないというアイコンが表示されます。

以下は、部分ビューでチャートオブジェクトをレンダリングするために使用されるコードです。

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");
   }
}
役に立ちましたか?

解決

問題は、画像の取得方法にあると思います。投稿したコードから、ajaxダウンロードを介して実際の画像データを取得し、新しい画像データをDOMに挿入しているように見えます。これはFirefoxで動作する可能性がありますが、IEでは動作しません(P.Sも試したことはありません)。とにかくIEがこれを好まないと仮定すると、image要素のsource属性を介して画像を画像ハンドラに向ける方が良いでしょう。画像を変更する必要がある場合は、ハンドラーに送信されるURLのパラメーターを変更するだけです。これが変更されると、IEとFirefoxの両方が新しい画像を要求します。例:

HTML

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

チャートを更新する必要がある場合のfrom 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

しかし、今ではフォルダの中にぶら下がっています。フォルダが画像で目詰まりしたくない...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top