【发布时间】:2017-06-05 20:57:46
【问题描述】:
我在 Visual Studio 2015 中使用 fullCalendar 库。我无法从 AJAX 命令填充事件。日历上没有任何事件。如果我只传递一个日期时间并设置 allDay = true,它将填充事件。我还需要它与时间一起工作,并且每天进行多个事件。
JS代码:
$(document).ready(function () {
$(".calendar").fullCalendar
({
header: {
left: 'month,basicWeek,basicDay,today',
center: 'title',
right: 'prev,next'
},
weekends: false,
eventLimit: true,
theme: true,
editable: false,
fixedWeekCount: false,
events: function(start, end, timezone, callback)
{$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Calendar/GetCalendarEvents",
dataType: 'json',
success: function (data)
{
var events = [];
$.each(data, function (index, value) {
events.push({
id: value['id'],
title: value['title'],
date: value['date']
//all data
});
console.log(value)
});
callback(events);
},
error: function (xhr, err) {
alert("ERROR! - readyState: " + xhr.readyState + "<br/>status: " + xhr.status + "<br/>responseText: " + xhr.responseText);
}
});
} });})
注意:上面的代码是让它工作的可能尝试之一。我之前尝试过以不同的方式对其进行编码。
控制器代码:
public ActionResult GetCalendarEvents()
{
var events = new List<VMCalendarEvents>();
var db_events = db.PatientVisits.ToList();
foreach(var e in db_events)
{
DateTime visit_start = Convert.ToDateTime(e.VisitStart);
DateTime visit_end = Convert.ToDateTime(e.VisitEnd);
var calEvent = new VMCalendarEvents
{
id = e.PatientVisitID.ToString(),
title = "Placeholder Title" + e.PatientVisitID.ToString(),
date = visit_start.ToShortDateString(),
start = visit_start.ToString(),
end = visit_end.ToString(),
editable = true,
allDay = false
};
events.Add(calEvent);
}
var rows = events.ToArray();
return Json(rows, JsonRequestBehavior.AllowGet);}
编辑:问题已解决
所以经过一番调查后,我决定在 MVC 中使用 Razor 来解决这个问题。我没有将其写入单独的 JS 文件,而是将其放入 html 文件的标题中。通过实现下面的代码,我能够以 (yyyy-MM-ddTHH:dd & MM/dd/yyyy hh:mm tt) 的日期格式获取对象:
$(function () {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultDate: '2017-06-12',
editable: true,
events: '@Url.Action("GetCalendarEvents", "Calendar")',
});
});
我使用 URL Action 命令调用了控制器并将 JSON 数据作为 ActionResult 返回。
【问题讨论】:
-
你的`$.each`循环有什么意义?在我看来,来自控制器的数据已经是正确的格式,无需翻译。你可以只做
callback(data)没有任何中间步骤。此外,您的控制器应该接受“开始”和“结束”参数,并且只返回当前显示日期的数据,否则每次用户转到新日期或日历中的视图时,它都会下载 all 你的事件一次又一次,效率很低。 -
就日期而言,您最好以 ISO 格式输出日期,以避免格式不明确或国际化的任何问题。目前看起来它们可能采用美国 M/D/Y 格式,但在这种情况下,fullCalendar 将不知道“05/03/2017”是 5 月 3 日还是 3 月 5 日。 YYYY-MM-DD 是明确的。可能是日历错误地解释了某些日期,甚至因为不理解它们而失败 - 您在加载事件时检查了浏览器控制台是否有错误或警告?
标签: javascript c# json fullcalendar