加载 fullcalendar.io 事件时出错 - 未显示数据

Posted

技术标签:

【中文标题】加载 fullcalendar.io 事件时出错 - 未显示数据【英文标题】:Error when loading fullcalendar.io events - no data displayed 【发布时间】:2022-01-04 08:04:06 【问题描述】:

我正在尝试从我的数据库中提取事件。进入功能后,当我想在日历上显示事件时,可以在events.push()事件中将数据带到控制台,但是日历上看不到数据。

JavaScript 代码

function getByMeetings() 
    debugger;
    $.ajax(
        type: 'GET',
        url: '@Url.Action("GetMeetingList", "Meeting", new area="admin" )',
        success: function (response) 
            debugger;
            events = [];
            var sources = calendar.getEventSources();
            for (var i = 0; i < sources.length; i++) 
                sources[i].remove();
            
            for (var i = 0; i < response.length; i++) 
                console.log(response[i]);
                events.push(
                    id: response[i].Id,
                    title: response[i].Title,
                    requesting: response[i].Requesting,
                    organizer: response[i].Organizer,
                    start: moment(response[i].StartDate).format('DD/MM/YYYY HH:mm'),
                    end: moment(response[i].EndDate).format('DD/MM/YYYY HH:mm'),
                    description: response[i].Description,
                    linkUrl: response[i].LinkUrl,
                    meetingCategoryId: response[i].MeetingCategoryId
                );
            
            calendar.addEventSource(events);
            debugger;
        ,
        error: function () 
            $('#saveModal').modal('hide');
            toastr.error('bir sorun ile karşılaşıldı toplantılar şu an için takvime getirilemiyor.');
        
    );

ASP.NET MVC 代码:

public JsonResult GetMeetingList()

    var model = _db.GetDefaultRepo<Meeting>()
        .GetAll()
        .Select(s =>
            new MeetingItemViewModel
            
                Id = s.Id,
                Title = s.Title,
                Description = s.Description,
                Requesting = s.Requesting,
                Organizer = s.Organizer,
                StartDate = s.StartDate,
                EndDate = s.EndDate,
                LinkUrl = s.LinkUrl,
                MeetingCategoryId = s.MeetingCategoryId
            ).AsEnumerable();

            return Json(model, JsonRequestBehavior.AllowGet);
            //return Json(model);
        

【问题讨论】:

calendar.addEventSource(events); 0:id:6,标题:'aaaa',请求:'cccc',组织者:'bbbb',开始:'24/11/2021 08:00',... 详细信息:描述:“

dddd" 结束:"24/11/2021 08:30" id:6 linkUrl:"eee" meetingCategoryId:1 组织者:"bbbb" 请求:"cccc" 开始:"24/11/2021 08:00" 标题: "aaaa" 长度: 5 [[原型]]: Array(0)

【参考方案1】:

fullCalendar 不接受 DD/MM/YYYY 格式的日期字符串。造成这种情况的一个原因是,它们可能与同样流行的 MM/DD/YYYY 格式不明确......一旦它只是一个字符串,就无法判断 01/03/2021 是 3 月 1 日还是 1 月 3 日。

fullCalendar 的Date Parsing 文档中列出了可接受的格式。如果您要传递一个字符串,那么它会接受与 ISO8601 兼容的字符串,这将包括像 YYYY-MM-DDTHH:mm 这样的格式(例如 2018-06-01T12:30

将开始和结束定义更改为

start: moment(response[i].StartDate).format('YYYY-MM-DDTHH:mm')
end: moment(response[i].EndDate).format('YYYY-MM-DDTHH:mm'),

应该解决问题(假设您没有任何其他未提及的 JS 错误)。


附:一直添加和删除事件源有点低效。我建议研究 fullCalendar 的自动事件馈送功能 - 请参阅 https://fullcalendar.io/docs/events-json-feed 和 https://fullcalendar.io/docs/events-function 了解您可以采用的两种方法。 (如果你只是让你的 C# 代码以正确的格式输出 JSON,而不是必须使用 javascript 再次转换它,那肯定会更整洁。)

【讨论】:

以上是关于加载 fullcalendar.io 事件时出错 - 未显示数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 composer 安装包时出错,但包似乎已安装

fullcalendar单槽事件结束时间

FullCalendar和jquery-confirm应用

对 fullcalendar.io 使用普通的 PHP 路由 (&) 和 symfony 路由 (/)

将事件开始日期从FullCalendar更新到我的数据库中会在00:00:00

在FullCalendar中隐藏开始时间