2010-08-17 12 views
7

Sto utilizzando il plug-in di calendario completo di Jquery e voglio poter fare clic su un evento e i dettagli dell'evento da compilare tramite AJAX in un div con l'id di #dettagli.jQuery.Load() non attiva Request.IsAjaxRequest in ASP.NET MVC2

Ecco l'azione del mio controller che sto tentando di caricare. Quando esegue il debug, l'azione non considera la richiesta in ingresso come AJAX e restituisce la vista completa anziché quella parziale. Importa se la vista completa è chiamata la stessa vista parziale? Vale a dire; '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); 

     } 
    } 

Ecco il codice jquery che sto utilizzando. Mi manca di non usare .load() correttamente nella funzione eventClick? Lo sviluppatore del plugin per il calendario ha confermato che eventClick non ha nulla a che fare con AJAX, quindi l'errore deve trovarsi nel mio codice.

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

        }); 
       } 


      }); 

     }); 

Così sto utilizzando la funzione Jquery.Load() in modo non corretto, o c'è qualcosa di sbagliato con il mio controller?

Altri aggiornamenti: ho finalmente capito il problema. XMLHttpRequest è stato inviato, ma sto riscontrando un errore del server interno 500, non risolto, in quanto non riesco a capire quale sia la causa dell'errore.

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 

AGGIORNAMENTO: ho finalmente capito qual era il problema. Non passavo nel modello per il parziale modo che la linea

return PartialView("Details"); 

caso sono stati

return PartialView("Details", pol_Event); 

questo generava l'errore interno del servizio 500.

+0

riassume come funziona IsAjaxRequest(): http://bit.ly/bXq32v – BritishDeveloper

risposta

5

Quando si effettua una richiesta Ajax si sta supponiamo di impostare la 'X-Data-Con' header HTTP a qualcosa come 'XMLHttpRequest' ad esempio.

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 

Questo 'X-richiesta-Con' intestazione è ciò che il metodo 'IsAjaxRequest()' cerca. Normalmente, i metodi Ajax di jQuery invieranno automaticamente questa intestazione. La mia ipotesi è che per qualche motivo il plugin di jQuery Calendar non stia inviando questa intestazione.

Vorrei scaricare qualcosa come fiddler o installare Firebug for Firefox e controllare i dati di richiesta/risposta HTTP non elaborati quando il controllo Ajax richiesta/calendario è attivato/inizializzato. Verifica se l'intestazione X-Requested-With è inclusa.

+0

Molte grazie, I' ll ping allo sviluppatore del plugin una mail – MrBliz

3

Sì. Anche se non deve essere inviato come intestazione di richiesta HTTP. È possibile inviarlo in un modulo dati o nella stringa di query di un GET. www.example.com?x-requested-with=XMLHttpRequest (valore case sensitive)

Sembra ridicolo ma vero. Ho provato e funziona :) riflessione sul metodo di estensione IsAjaxRequest() si rivelerà questo:

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

Mille grazie per la tua risposta e ulteriori informazioni – MrBliz

Problemi correlati