0

ASP.Net Charting Controlsと ASP.Net MVCを使用しています。

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

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

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

  • POST で新しいパラメーターを送信する
  • アプリケーションがチャート オブジェクトのパラメーターを変更しました
  • コントローラーは、チャート オブジェクトをコントロールのようにレンダリングする部分ビューに送信します。
  • 次に、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");
   }
}
4

3 に答える 3

1

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

HTML

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

チャートを更新する必要があるときの jQuery から:

function UpdateChart(chartId, seriesId, time){
  $("#chart").attr("src","./chart.aspx?SeriesId="+seriesId+"&ChartId="+chartId+"&Time="+time);
}
于 2009-10-21T14:56:40.217 に答える
0

ImageStorageMode を次のように変更することで機能しました。

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

しかし、今はフォルダにぶら下がっています。フォルダに画像が詰まってほしくない…

于 2009-10-21T16:20:31.363 に答える
0

x 日前のイメージをクリーンアップするサービスを作成するか、#SEQ(maxFiles,minutes) を使用して有効期限を設定できますが、命名に関してはあまり柔軟ではありません。

于 2011-01-25T23:01:23.967 に答える