FullCalendar не будет привязываться к каналу Json из ASP.NET MVC3 Action - PullRequest
7 голосов
/ 03 апреля 2011

Мне не удается получить jquery-плагин FullCalendar для привязки к массиву Json, полученному из действия ASP.NET MVC3.

Я удалил почти все из кода, чтобы попытаться найти решение проблемы; Я остаюсь с этим, который из всех прочитанных SO и постов в блоге должен работать:

Действие (Контроллер календаря)

    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);
     }

View

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

Результатом является пустой календарь, без связанных событий. Я подтвердил, что Json восстанавливается:

Результат Json

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

И это прекрасно работает:

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

Я попытался использовать все количество форматов даты (включая метки времени ISO8601 и * nix) и получил тот же результат: никаких связанных событий, просто пустой календарь. Если я добавлю функцию $ .ajax: функцию к объекту .fullCalendar, он срабатывает, так что, вероятно, что-то не так с возвращением Json - но для меня это выглядит прекрасно.

Я использую FullCalendar 1.5 (хотя я тоже пробовал 1.4.11), JQuery 1.5.1, JQueryUI 1.8.11.

Я перепробовал все, что мог придумать - любые идеи очень ценятся!

Ответы [ 3 ]

3 голосов
/ 03 апреля 2011

Я прошел и обнаружил проблему - существует конфликт имен функций между fullcalendar.js и jquery.validate.js.

1 голос
/ 25 марта 2012

Используйте метод $ .ajax ().

Действие (Контроллер календаря)

    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);
    } 

View 1010 *
*

    $(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); 
            }  
        });  
    }  
    });  
    }) 

Надеется, что это поможет.

1 голос
/ 05 апреля 2011

Может быть, вместо этого:

return Json(rows, JsonRequestBehavior.AllowGet);

Попробуйте это:

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

Или вместо этого:

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

Попробуйте это:

events: '@Url.Action("Events", "Calendar")'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...