2011-04-03 13 views
7

No puedo obtener el FullCalendar complemento jquery para vincular a una matriz Json procedente de una acción ASP.NET MVC3.FullCalendar no se vinculará a Json feed desde ASP.NET MVC3 Acción

He eliminado casi todo del código para tratar de encontrar el problema; Me quedo con esto, que de todos los envíos SO y el blog que he leído, se debe trabajar;

Acción (controlador de Calendario)

public JsonResult Events(double start, double end) 
    { 
     var rows = new object[] { new { title="Event1", start= "2011-04-04" }, 
            new { title="Event2", start= "2011-04-05" } }; 
     return Json(rows, JsonRequestBehavior.AllowGet); 
    } 

Ver

<script type='text/javascript'> 
    $(document).ready(function() { 
    $('#calendar').fullCalendar({ 
     events: '@Url.Content("~/Calendar/Events")' 
    }) 
}); 

Los resultados son un calendario en blanco, sin eventos enlazados. He comprobado que el JSON se está recuperando: resultado

JSON

[{"title":"Event1","start":"2011-04-04"},{"title":"Event2","start":"2011-04-05"}] 

Y esto funciona bien:

$(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      events: [{title: 'Event1',start: '2011-04-04'}, 
        {title: 'Event2',start: '2011-04-05'} 
        ]}); 
    }); 

He intentado usar toda número de formatos de fecha (incluyendo ISO8601 y * nix timestamps y obtuve el mismo resultado: no hay eventos vinculados, solo un calendario en blanco. Si agrego un error $ .ajax: function al objeto .fullCalendar, se dispara, así que presumiblemente algo está pasando con el Json que se devuelve, pero Se ve bien a mi.

Estoy usando FullCalendar 1.5 (aunque también intenté 1.4.11), JQuery 1.5.1, JQueryUI 1.8.11.

He intentado todo lo que puedo pensar, ¡cualquier idea es muy apreciada!

+0

Di un paso atrás y encontré el problema: hay una colisión de nombre de función con jquery.validate.js. –

Respuesta

3

Di un paso atrás y encontré el problema: hay una colisión de nombre de función entre fullcalendar.js y jquery.validate.js.

+0

cuál función? ¿Podría proporcionar más detalles, por favor? – Gandarez

+0

No, no recuerdo; esto fue hace 30 meses. Si es crítico, ¿podrías ejecutar algunas versiones antiguas? Pero el problema fue resuelto por las versiones posteriores, entonces, ¿cuál es el problema? –

0

Tal vez en lugar de esto:

return Json(rows, JsonRequestBehavior.AllowGet); 

intenta esto:

return Json(rows.ToArray(), JsonRequestBehavior.AllowGet); 

O en lugar de esto:

events: '@Url.Content("~/Calendar/Events")' 

Prueba esto:

events: '@Url.Action("Events", "Calendar")' 
+0

Gracias, pero el JSON se devuelve correctamente, por lo que cambiar la forma en que UrlHelper crea la URL no hace la diferencia. Y mi parámetro de filas ya es una matriz. El problema es definitivamente jquery.validate.js. –

1

Utilice el método $ .ajax().

Acción (controlador de Calendario)

public JsonResult Events(string start, string end) 
    { 
     //convert string to date 
     DateTime _start = DateTime.TryParse(start, out _start) ? _start : DateTime.Now.Date; 
     DateTime _end = DateTime.TryParse(end, out _end) ? _end : DateTime.Now.Date; 

     var rows = 
     new object[] { new { title="Event1", start= "2011-04-04" },          
     new { title="Event2", start= "2011-04-05" } }; 
     return Json(rows, JsonRequestBehavior.AllowGet); 
    } 

Ver

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

    events: function (start, end, callback) { 
     $.ajax({ 
      url: '@Url.Content("~/Calendar/Events")', 
      dataType: 'json', 
      data: { 
       start: start.toLocaleString("yyyy-mm-dd"), 
       end: end.toLocaleString("yyyy-mm-dd") 
      }, 

      success: function (doc) { 
       var events = []; 
       $.each(doc, function (key, val) { 
        events.push({ 
         title: val.title, 
         start: val.start, 
         url: 'http://google.com' 
        }); 
       }); 

       callback(events); 
      } 
     }); 
    } 
    }); 
    }) 

espera que esto ayudará.

+0

No, el problema fue definitivamente la colisión del nombre que descubrimos el año pasado. La expansión de la llamada ajax no ayudaría, pero sí con una versión más reciente de jquery.validate.js. –

+0

Heh. Estaba teniendo un problema similar. Excepto que el tutorial que había seguido especificaba inicio y fin como dobles, no como cadenas. Noté que en tu código eran cuerdas y le di una oportunidad. Resulta que era correcto, y ahora se llama a mi código GetEvents en el back-end. Publicación aquí en caso de que ayude a alguien más en el futuro. –

Cuestiones relacionadas