مخططات ASP.NET - الحصول على jQuery على IE 7 يؤدي إلى عدم تحميل الصورة

StackOverflow https://stackoverflow.com/questions/1600974

سؤال

أنا أستخدم ASP.NET تحكم الرسم و ASP.NET MVC.

أحاول عرض مخطط على الصفحة ، ويمكن للمستخدم تغيير البيانات المختلفة المرتبطة بهذا المخطط ثم اضغط على زر سيقوم بإجراء عملية ما بعد ذلك ثم إرجاع مخطط تم تقديمه حديثًا. يتم تحديث هذا عبر jQuery الذي يحمل طريقة عرض جزئية تحتوي على الرسم البياني.

المشكلة التي أواجهها هي أنه في IE 7 أحصل على أيقونة. من الغريب أنه يعمل بشكل جيد في Firefox!

عملية تحديث الرسم البياني:

  • إرسال معلمات جديدة في منشور
  • تم تغيير التطبيقات المعلمات على كائن الرسم البياني
  • يرسل وحدة التحكم كائن الرسم البياني إلى عرض جزئي مما يجعله مثل عنصر تحكم
  • 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 (PS لم يحاول أيضًا). على أي حال ، على افتراض أن IE لا يعجبك هذا ، سيكون من الأفضل توجيه الصورة إلى معالج الصورة عبر السمة المصدر لعنصر الصورة. عندما تحتاج إلى تغيير الصورة ، فقط قم بتغيير المعلمات في عنوان URL المرسلة إلى معالج ، عندما يتغير هذا ، وسيقوم كل من 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);
}

نصائح أخرى

يمكنك كتابة خدمة لتنظيف الصور التي يبلغ عمرها أيام X أو يمكنك استخدام #Seq (maxfiles ، الدقائق) لتعيين انتهاء الصلاحية ، لكن هذا غير مرن حقًا مع التسمية.

لقد حصلت عليها من خلال تغيير ImagestorAgemode إلى:

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

ولكن الآن معلقة في مجلد. لا أريد مجلد انسداد بالصور ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top