سؤال

منذ الترقية من MVC 2 Beta 2 إلى RC، أواجه مشكلة في تقديم Ajax في Internet Explorer. عند تنفيذ وظيفة JQuery Form، تقوم الدالة بإرجاع عنوان URL لعمل تحكم. هذا يعمل بشكل جيد مع إجراء تحكم التقاط أنه كان AJAXREQUEST ثم إرسال عرض جزئي لتحديث الصفحة. هذا لا يزال يعمل بشكل جيد في فايرفوكس، ولكن في Internet Explorer، فإن الدعوة النهائية لعمل وحدة التحكم الآن تأتي الآن من ذاكرة التخزين المؤقت والعودة إرجاع طريقة عرض كاملة بدلا من جزئية.

لقد حاولت تحديد الإخراج إلى 0 دون نجاح، وقد جربت أيضا نظام Nocache ActionFilter كما هو موضح هنا تعطيل ذاكرة التخزين المؤقت للمتصفح لموقع ASP.NET بأكملها مع عدم وجود حظ. الطريقة الوحيدة التي يمكنني التوقف عنها من السحب من ذاكرة التخزين المؤقت هي حذف النسخة المخزنة خفيفة الاتجاه جسديا.

أي شخص لديه أي أفكار (الاعتذار إذا لم يكن هذا واضحا جدا، صعبة واحدة لشرح!)؟

هل كانت مفيدة؟

المحلول

لسبب ما، أي عدوانية حقا حول Caching Ajax يحصل. لذلك إذا كنت جلب ذلك عبر Ajax، فإن السلوك ليس مفاجئا بالنسبة لي. ليس من المستغرب أيضا هو أن استخدام سمة التخزين المؤقت للإخراج لم يحل المشكلة، لأنه IE، بدلا من الخادم، الذي يقوم بالتخزين المؤقت. ما عليك القيام به هو إخبار IE بعدم التخزين المؤقت للطلب، عن طريق تعيين الرؤوس المناسبة في HTTP. فيما يلي كيف نفعل ذلك:

    [CacheControl(HttpCacheability.NoCache), HttpGet]
    public JsonResult DoStuff()
    {
        //...
    }

public class CacheControlAttribute : ActionFilterAttribute
{
    public CacheControlAttribute(HttpCacheability cacheability)
    {
        this._cacheability = cacheability;
    }

    private HttpCacheability _cacheability;

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
        cache.SetCacheability(_cacheability);
    }
}

نصائح أخرى

بلدي 2 سنتا إلى حل كريج العظيم -

إذا كنت تستخدم عنصر تحكم المستخدم وتقديمه باستخدام "عرض"

<% Html.RenderAction("UserList", "User"); %>

وتغسل هذه الصفحة عن طريق الاستمرار بالإضافة إلى النشر، ثم لا تذكر طريقة الطلب في إعلان السمة.

[CacheControl(HttpCacheability.NoCache)]

على سبيل المثال، لدي شبكة بحث ولوحة بحث فوقها. لقد جعلت شبكتي للتحكم في المستخدم بحيث يمكنني استدعاء الفرز والترفيه عبر AJAX (GET) لا يزال يتم الاحتجاج أيضا عند الضغط على زر "البحث" (POST) لذلك أحتاج إليها لكليهما.

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