Reski's hobbies blog place…

This is not just about me, but also bout my family
March 23rd, 2009 by ayah

MVC, Ajax and Internet Explorer

Internet Explorer mempunyai kelemahan apabila ada request yang bersifat async (ajax). Dia tidak akan langsung melakukan load terhadap request yang dimaksud, tetapi dia akan melakukan load dari cache apabila cache yang berkaitan dengan request tersebut masih valid. Sehingga response yang diberikan adalah data dari cache.Nyebelin ya...ini yang bikin rese....
Pada webform standar sebenarnya cara untuk mengatasinya mudah yaitu memasukan code berikut pada setiap postback, enaknya sih dimasukan ke event Page_Load sehingga perlakuan ini akan tetap melekat pada setiap request

 
   Response.CacheControl = "no-cache";
   Response.AddHeader("Pragma", "no-cache");
   Response.Expires = -1;
 

Dengan begitu, tidak ada yang namanya loading dari cache. Untuk asp.net mvc, caranya agak berbeda, karena konsepnya aja dah beda. Anda harus meletakkan code diatas pada event OnActionExecuting (override dari class Controller). Sehingga code yang didapatkan adalah

 
  protected override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    if (Request.IsAjaxRequest())
    {
         Response.CacheControl = "no-cache";
         Response.AddHeader("Pragma", "no-cache");
         Response.Expires = -1;
       }
       base.OnActionExecuting(filterContext);
    }
  }
 

Bedanya dari kedua code diatas adalah, Webform tidak dapat mengidentifikasi request yang dimaksud adalah cache atau bukan, sebaliknya, asp.net mvc dengan sebuah extension function dapat mengidentifikasi apakah request tersebut ajax atau bukan.