2010-08-17 13 views
7

Używam wtyczki pełnego kalendarza Jquery i chcę móc kliknąć wydarzenie i szczegóły zdarzenia, które należy wypełnić za pośrednictwem AJAX do elementu div o identyfikatorze #details.jQuery.Load() nie wyzwalanie Request.IsAjaxRequest w ASP.NET MVC2

Oto moja akcja kontrolera, którą próbuję wczytać. Podczas debugowania akcja nie uwzględnia przychodzącego żądania jako AJAX i zwraca pełny widok zamiast częściowego. Czy ma znaczenie, czy pełny widok jest nazywany widokiem częściowym? To znaczy; "Details.aspx" & "Details.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); 

     } 
    } 

Oto kod jquery, którego używam. Czy brakuje mi nie używania .load() poprawnie w funkcji eventClick? Developer wtyczki kalendarza potwierdził, że eventClick nie ma nic wspólnego z AJAX, więc błąd musi leżeć w moim kodzie.

$(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' 
          } 
         } 

        }); 
       } 


      }); 

     }); 

Używam nieprawidłowo funkcji Jquery.Load() lub czy jest coś nie tak z moim kontrolerem?

Więcej aktualizacji: w końcu złapałem problem. Wysyłam XMLHttpRequest, ale napotykam błąd wewnętrzny wewnętrzny 500, nie rozwiązany, ponieważ nie mogę dowiedzieć się, co jest przyczyną błędu.

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 

AKTUALIZACJA: W końcu zorientowałem się, na czym polegał problem. Nie mijał w modelu częściowego więc linii

return PartialView("Details"); 

powinny były

return PartialView("Details", pol_Event); 

ten został generowania błędu serwisowego wewnętrzny 500.

+0

Podsumowuje jak IsAjaxRequest() działa: http://bit.ly/bXq32v – BritishDeveloper

Odpowiedz

5

Kiedy złożyć wniosek Ajax jesteś przypuszczać, aby ustawić 'X-Requested-With' nagłówek HTTP do czegoś podobnego 'XMLHttpRequest' np.

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 

Ten nagłówek "X-Requested-With" jest tym, czego szuka metoda "IsAjaxRequest()". Zwykle metody Ajax jQuery wysyłają ten nagłówek automatycznie. Domyślam się, że z jakiegoś powodu wtyczka jQuery Calendar nie wysyła tego nagłówka.

Chciałbym pobrać coś w stylu: fiddler lub zainstalować Firebug for Firefox i sprawdzić surowe dane żądania/odpowiedzi HTTP po uruchomieniu/inicjalizacji żądania Ajax/kalendarza. Zobacz, czy dołączono nagłówek X-Requested-With.

+0

Wielkie dzięki, I” Wyślij ping do autora wtyczki mailowej – MrBliz

3

Tak. Chociaż nie musi być wysyłany jako nagłówek żądania HTTP. Możesz POST go w danych formularza lub w ciągu kwerendy GET. www.example.com?x-requested-with=XMLHttpRequest (wielkość liter)

Wydaje się niedorzeczne, ale prawdziwe. Próbowałem to i to działa :) refleksja nad IsAjaxRequest() Metoda rozszerzenie będzie udowodnić:

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

Wielkie dzięki za twoją odpowiedź i dodatkowy wgląd – MrBliz

Powiązane problemy