加载为部分时,FullCalendar呈现但不激活触发器。没有加载数据

时间:2017-03-29 06:47:03

标签: jquery razor asp.net-mvc-5 fullcalendar

更新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呈现但不激活触发器。 没有加载数据。

  • Bootstrap 3.3.7
  • MVC 5.2.3.0
  • FullCalender 3.0.0
  • 的jquery-3.1.1
  • 的jquery-UI-1.12.1
  • VS#2015 in C#

设置

带有<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.cshtmlIndex.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调用时会被正确调用。

非常欢迎任何帮助......: - )

1 个答案:

答案 0 :(得分:0)

好的,答案太简单了......真的......

$(document).ready的底部是一行说:

CalLoading = false;

将其更改为:

CalLoading = true;

这似乎解决了这个问题......