更新2017/03/29 18:00
经过多次尝试,我发现如果页面加载'Calendar'TAB是活动的TAB,它正确加载,但是,当页面不是活动选项卡时,我得到rangeStart错误并且没有加载数据。 ..
虽然不清楚为什么,我至少可以让它有效......有点......
更新2017/03/29 16:00
我们已经取得了进展,幸运的是通过StackOverflow显然...... 首先我发现附上两个帖子: How do I return the response from an asynchronous call?
jQuery: Return data after ajax call success
这让我想到了数据需要被称为异步的事实。
另一篇文章:
Maping Events to FullCalender using JSON
然后给了我提示如何渲染返回的JSON(我的c#controller返回JSON数据)
所以,我改变了我的代码如下:
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
//defaultDate: moment().format("DD/MM/YYYY"),
timeFormat: 'HH(:mm)',
defaultView: 'month',
editable: true,
allDaySlot: false,
selectable: true,
slotMinutes: 15,
events: function (start, end, timezone, callback) {
$.ajax({
url: '@Url.Action("GetDiaryEvents", "Calendar")',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: {
// our hypothetical feed requires UNIX timestamps
start: start.format(),
end: end.format()
},
success: function(events)
{
//debugger;
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', events);
$('#calendar').fullCalendar('rerenderEvents' );
}
哪个很好用,但是......如果Calendar
页面设置为活动页面, ONLY 就会这样做。如果它不是活动页面,则数据不会被加载,即使从月份切换视图也不会加载数据 - >周 - >一天又一天......
加载完整的rangeStart
页面后仍然会出现Index.cshtml
错误,并且没有加载任何数据且没有呈现日历。
在JQuery Tab调用中添加'render call'解决了页面上的'no rendering'问题。但仍然无法解决无数据问题: https://fullcalendar.io/docs/display/render/
我发现这篇文章: FullCalendar-2.7.3 events not showing on initial load
这表明我的标准VS2015 jquery-3.1.1.js将成为主要罪魁祸首,是否有人能够确认?
问题:
作为部分加载时,FullCalendar呈现但不激活触发器。 没有加载数据。
是
设置
带有<div id="#calendar"></div>
的页面是一个cshtml,意味着在标签布局下加载为部分。
_Layout.cshtml
的{{1}}中的所有主要的js / css都按以下方式加载:
Index.cshtml
点击“日历标签”后,系统会显示@{
ViewBag.Title = "Main";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - Some Application</title>
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/datatables")
@Styles.Render("~/Content/css")
@Styles.Render("~/Content/themes/base/css")
@Styles.Render("~/Content/datatables")
。
_prtCalendar.cshtml
<!-- Calendar -->
<div role="tabpanel" class="tab-pane" id="_calendar">
@Html.Partial("~/Views/Company/_prtCalendar.cshtml", Model)
</div>
有一个加载日历的_prtCalendar.cshtml
部分。 Index.cshtml(文档所在的部分也有$(document).ready(function () {
......
该部分中的JQuery-FullCalendar均引用$(document).ready(function () {
到CalendarController
@Url.Action('<action>,"Calendar")
诡计
如果我直接加载$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
//defaultDate: moment().format("DD/MM/YYYY"),
timeFormat: 'HH(:mm)',
defaultView: 'month',
editable: true,
allDaySlot: false,
selectable: true,
slotMinutes: 15,
events: '@Url.Action("GetDiaryEvents", "Calendar")',
eventClick: function (calEvent, jsEvent, view) {
alert('You clicked on event id: ' + calEvent.id
+ "\nSpecial ID: " + calEvent.someKey
+ "\nAnd the title is: " + calEvent.title);
},
,
即我直接在_prtCalendar.cshtml
页面中/通过_prtCalendar.cshtml
页面加载所有js / css并显示_Layout.cshtml
和Index.cshtml
一切正常,CalendarController
内的所有函数都被正确调用。
然而, IF 我将_prtCalendar.cshtml
加载为部分,事情似乎出错并且没有任何内容被加载,我收到了JS错误:
TypeError:rangeStart未定义[了解详情] fullcalendar.js:11023:6
现在,我认为这是因为rangeStart
显然没有正确设置,但我似乎无法识别为什么。
_prtCalendar.cshtml
在通过以下行尝试fullcalendar.js
之前先加载moment.min.js
和$(document).ready
。
<link href="~/Content/fullcalendar.css" rel="stylesheet" />
<script type="text/javascript" src="~/Scripts/lib/moment.min.js"></script>
<script type="text/javascript" src="~/Scripts/fullcalendar.js"></script>
如果我使用F12调试器,我可以看到$('#calendar')
函数被调用但在rangeStart
调用时失败。
引用不同控制器的其他TAB上的其他按钮(在同一Index.cshmtl
中)从Index.cshmtl
调用时会被正确调用。
非常欢迎任何帮助......: - )
答案 0 :(得分:0)
好的,答案太简单了......真的......
在$(document).ready
的底部是一行说:
CalLoading = false;
将其更改为:
CalLoading = true;
这似乎解决了这个问题......