Json FullCalendar不显示数据
我正在MVC项目中使用fullCalendar。我从Nuget下载了fullCalendar,但它没有在日历上显示我的数据。我可以得到我的数据,但它没有显示 我的代码出了什么问题 MVC行动方式: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
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很高兴您解决了这个问题,尽管在这种情况下您应该考虑删除这个问题。但没问题。。。如果在将来阅读类似的问题对读者有用,如果答案是正确的,那么请考虑标记为“接受”和/或投票,以便其他人可以看到它是相关的。谢谢