ASP.Netチャート-IE 7でjQueryを介して取得すると、画像が読み込まれません
-
05-07-2019 - |
質問
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
しかし、今ではフォルダの中にぶら下がっています。フォルダが画像で目詰まりしたくない...