2010-08-17 12 views
7

JQuery tam takvim eklentisini kullanıyorum ve bir olayı ve AJAX aracılığıyla doldurulacak olayın ayrıntılarını tıklayabilmek istiyorum #details kimliğine sahip bir div içine.jQuery.Load(), ASP.NET MVC2'deki Request.IsAjaxRequest'i tetiklemiyor

Yüklemeyi denediğim denetleyici eylemim burada. Hata ayıklandığında, eylem gelen isteği AJAX olarak kabul etmez ve kısmi yerine tam görünümü döndürür. Tam görünümün kısmi görünümle aynı şekilde adlandırılması önemli midir? yani; 'Details.aspx' & 'Ayrıntılar.ascx'?

public ActionResult Details(int id) 
    { 
     Pol_Event pol_Event = eventRepo.GetEvent(id); 
     ViewData["EventTypes"] = et.GetEventType(id); 
     if (pol_Event == null) 
      return View("NotFound"); 
     else 
     { 
      if(HttpContext.Request.IsAjaxRequest()){ 
       return PartialView("Details"); 
      } 
      else 
       return View(pol_Event); 

     } 
    } 

Kullandığım jquery kodu. EventClick işlevinde .load() yöntemini doğru kullanmama mı eksik? Takvim eklentisinin geliştiricisi, eventClick'in AJAX ile ilgisi olmadığını doğruladı. Bu nedenle, hatanın kodumda bulunması gerekir.

$(document).ready(function() { 
      $('#calendar').fullCalendar({ 

       header: { 
        left: 'prev,next today', 
        center: 'title', 
        right: 'month,agendaWeek,agendaDay' 
       }, 

       events: "/Events/CalendarData", 
       allDayDefault: false, 

       selectable: true, 
       eventClick: function(event) { 
        $('details').load(event.url); 
       }, 
       eventRender: function(event, element) { 
        element.qtip({ 
         content: event.title + " @ " + event.venue, 

         position: { 
          corner: { 
           target: 'topLeft', 
           tooltip: 'bottomLeft' 
          } 
         } 

        }); 
       } 


      }); 

     }); 

Yani ben yanlış Jquery.Load() işlevini kullanarak değilim, ya da benim denetleyicisi bir sorun var mı?

Daha fazla güncelleştirme: Sonunda sorunu yakaladım. XMLHttpRequest gönderiliyor ancak 500 iç sunucu hatasıyla karşılaşıyorum, hataya ne sebep olduğunu anlayamadığım için henüz çözülmedi.

Host: localhost:4296 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 
Firefox/3.6.8 
Accept: text/html, */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost:4296/Events/EventCalendar 
Cookie: .ASPXAUTH=56C5F4FD536564FF684F3F00E9FB51A5F2F1B22D566C517923D71FEAF599D266531CAC52BF49D2700E048DD420A4575456855303CC2DCB5875D4E1AD8883821EA62E5169969503776C78EB3685DAA48C 

GÜNCELLEME: Sonunda sorunun ne olduğunu anladım. Ben çizgi

return PartialView("Details"); 

böylece kısmi için modelinde geçen değildi

return PartialView("Details", pol_Event); 

bu 500 iç hizmet hatası üretme edildi

olmalıydı.

+0

özetler: http://bit.ly/bXq32v – BritishDeveloper

cevap

5

Eğer 'XMLHttpRequest' örneğin gibi bir şeye HTTP ' X-Talep-ile' başlığı ayarlamak varsayalım konum Ajax isteği yaptığınızda.

Host    www.google.com 
User-Agent   Mozilla/5.0 (Windows; U; Windows NT 6.1; (snip...) 
Accept    */* 
Accept-Language  en-us,en;q=0.5 
Accept-Encoding  gzip,deflate 
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive   115 
Connection   keep-alive 
X-Requested-With XMLHttpRequest 
Referer    http://www.google.com 

Bu 'X-Talep-with' başlığı 'IsAjaxRequest()' yöntemi arar şeydir. Normalde, jQuery'nin Ajax yöntemleri bu üstbilgiyi otomatik olarak gönderir. Tahminimce, herhangi bir nedenle jQuery Calendar eklentisi bu başlığı göndermiyor.

fiddler gibi bir şey indirebilir veya Firebug for Firefox'u yükler ve Ajax isteği/Takvim denetimi başlatıldığında/başlatıldığında işlenmemiş HTTP İsteği/Yanıtı verilerini denetlerim. X-Talep Edilen-başlığıyla birlikte eklenip eklenmediğine bakın.

+0

çok teşekkür ederiz, ben Eklentinin geliştiricisine bir posta gönderebilirim. – MrBliz

3

Evet. Her ne kadar bir HTTP İstek Başlığı olarak gönderilmek zorunda olmasa da. Bir form verisinde veya bir GET’in sorgu dizesinde POST yapabilirsiniz. www.example.com?x-requested-with=XMLHttpRequest (büyük/küçük harfe duyarlı değer)

Gülünç ama gerçek gibi görünüyor. Ben denedim ve işe yarıyor :) Reflection IsAjaxRequest() uzantısı yöntemi bu ispat edecektir: IsAjaxRequest() nasıl çalıştığını

return ((request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"))); 
+0

Yanıtınız ve ek bilgileriniz için çok teşekkürler – MrBliz

İlgili konular