Json FullCalendar不显示数据

Json FullCalendar不显示数据,json,asp.net-mvc,date,fullcalendar,momentjs,Json,Asp.net Mvc,Date,Fullcalendar,Momentjs,我正在MVC项目中使用fullCalendar。我从Nuget下载了fullCalendar,但它没有在日历上显示我的数据。我可以得到我的数据,但它没有显示 我的代码出了什么问题 MVC行动方式: public JsonResult GetEvents() { dbContext = new Context(); var events = dbContext.Schedule.ToList(); return new JsonResult { Data = ev

我正在MVC项目中使用fullCalendar。我从Nuget下载了fullCalendar,但它没有在日历上显示我的数据。我可以得到我的数据,但它没有显示

我的代码出了什么问题

MVC行动方式:

  public JsonResult GetEvents()
  {
    dbContext = new Context();
    var events = dbContext.Schedule.ToList();

    return new JsonResult { Data = events, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  }
查看:

  public JsonResult GetEvents()
  {
    dbContext = new Context();
    var events = dbContext.Schedule.ToList();

    return new JsonResult { Data = events, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  }
我认为GenerateCalendar函数不起作用

    <link href="~/Content/fullcalendar.min.css" rel="stylesheet" />
    <script src="~/Content/PanelJS/jquery.min.js"></script>
    <script src="~/Content/PanelJS/moment.min.js"></script>
    <script src="~/Scripts/fullcalendar.min.js"></script>
    <script>

        $(document).ready(function () {
            var events = [];
            $.ajax({
                type: "GET",
                url:"@Url.Action("GetEvents","Schedule")",
                success: function (data) {
                    $.each(data,function(i,v)
                    {
                        events.push({
                            title: v.Name,
                            start: v.Date,
                            end: v.EndDate,
                            location:v.Location

                        });
                        console.log(events);
                    })
                    GenerateCalendar(events);
                },
                error:function(error)
                {
                    alert('Error');
                }
            });

            function GenerateCalendar(events)
            {
                $('#calendar').fullCalendar('destroy');
                $('#calendar').fullCalendar(
                    {
                        contentHeight: 400,
                        defaultDate: new Date(),
                        color:'lightBlue',
                        timeFormat: 'h(:mm)a',
                        header: {
                            left: 'prev,next today',
                            center: 'title',
                            right:'month,basicWeek,basicDay,agenda'
                        },
                        eventLimit: true,
                        eventColor: '#378006',
                        events:events
                    })
            }
        });
</script>

从控制台输出来看,您的日期似乎是以不明确的格式作为字符串提供的。fullCalendar/momentJS在没有明确告知您使用的格式的情况下无法理解这一点。它可以是
dd/mm/yyyy
mm/dd/yyyy
。解析器无法知道如何处理它

因此,fullCalendar无法将此数据用作事件,因为它不了解开始和结束日期

fullCalendar接受的日期和时间格式与momentJS接受的格式相同(因为它使用momentJS处理日期)。本文对此进行了记录:更详细的内容如下:

因此,你可以

1) (建议)重新编写服务器端代码,使其以ISO格式返回日期。通常,如果您在C#代码中使用DateTime对象,那么.NET JSON serialiser将自动为您这样做。由于您将实体框架查询的结果直接序列化为JSON,因此我怀疑
Schedule
类的
Date
EndDate
属性是字符串而不是日期时间,这反过来意味着您可能将日期作为字符串存储在数据库中。如果是这样的话,这是一种不好的做法,您应该通过将日期存储为
datetime
列来立即修复。日期不是字符串,它们是日期。您在屏幕上看到的(例如,2018年5月9日)仅仅是该日期以人类可读形式的众多可能表示之一。对于实际存储日期信息来说,它不是一种好的格式

2) (可选)如果情况并非如此,或者由于某种原因不可能,则告诉momentJS根据您提供的格式解析日期,然后将数据作为矩对象传递给fullCalendar,例如

events.push({
  title: v.Name,
  start: moment(v.Date, "DD/MM/YYYY"),
  end: moment(v.EndDate, "DD/MM/YYYY"),
  location: v.Location
});

momentJS中特定格式解析功能的详细文档可在此处找到:

谢谢您的回答。我在你回答之前解决了我的问题。我将我的列类型字符串更改为datetime。@user9582479很高兴您解决了这个问题,尽管在这种情况下您应该考虑删除这个问题。但没问题。。。如果在将来阅读类似的问题对读者有用,如果答案是正确的,那么请考虑标记为“接受”和/或投票,以便其他人可以看到它是相关的。谢谢