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

Jquery 作为部分加载时,FullCalendar会呈现,但不会激活任何触发器。没有加载任何数据,jquery,razor,asp.net-mvc-5,fullcalendar,Jquery,Razor,Asp.net Mvc 5,Fullcalendar,更新2017/03/29 18:00 经过多次尝试,我发现如果页面加载时“日历”选项卡是活动选项卡,那么它会正确加载,但是,当页面不是活动选项卡时,我会收到rangeStart错误,并且不会加载任何数据 虽然不清楚为什么,我至少可以让它工作…有点 更新2017/03/29 16:00 我们取得了进展,幸运的是通过StackOverflow显然。。。 首先,我发现了两个附加的帖子: 这让我认识到,数据需要被称为异步的 另一个职位: 然后给我提示如何呈现返回的JSON(我的c#控制器返回JS

更新2017/03/29 18:00

经过多次尝试,我发现如果页面加载时“日历”选项卡是活动选项卡,那么它会正确加载,但是,当页面不是活动选项卡时,我会收到rangeStart错误,并且不会加载任何数据

虽然不清楚为什么,我至少可以让它工作…有点


更新2017/03/29 16:00

我们取得了进展,幸运的是通过StackOverflow显然。。。 首先,我发现了两个附加的帖子:

这让我认识到,数据需要被称为异步的

另一个职位:

然后给我提示如何呈现返回的JSON(我的c#控制器返回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' );
                    }
@{
  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")
但是,它工作得很好……只有当
日历
页面设置为活动页面时,它才会这样做。如果它不是活动页面,数据不会被加载,甚至在从月->周->日切换视图时也不会加载数据

加载完整的
Index.cshtml
页面后,它仍然会给出
rangeStart
错误,并且不会加载任何数据,也不会呈现任何日历

在JQuery选项卡调用中添加“渲染调用”可以解决页面上的“无渲染”问题。但仍然无法解决无数据问题:

我发现这个帖子:

这表明我的标准VS2015 jquery-3.1.1.js将是罪魁祸首,有人能证实吗


问题:

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

使用

  • 引导程序3.3.7
  • MVC 5.2.3.0
  • 全压光机3.0.0
  • jquery-3.1.1
  • jquery-ui-1.12.1
  • VS2015中的C#
设置

带有
的页面是一个cshtml,用于在选项卡式布局下作为部分加载

在选项卡
Index.cshtml
\u Layout.cshtml
中,所有主要的js/css都按照以下方式加载:

$('#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' );
                    }
@{
  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")
\u prtCalendar.cshtml
有一个加载日历的
$(document).ready(function(){
部分。Index.cshtml(文档的一部分)还有一个
$(document).ready(function(){
)部分

该部分中的JQuery FullCalendar都是通过
@Url.Action(',“Calendar”)

诀窍

如果我直接加载
\u prtCalendar.cshtml
, i、 e.我直接在
\u prtCalendar.cshtml
页面中加载所有js/css,并在没有
\u Layout.cshtml
Index.cshtml
的情况下显示,所有工作正常,
CalendarController
中的所有函数都被正确调用

但是,如果我将
\u prtCalendar.cshtml
作为部分加载,则似乎出现了问题,没有加载任何内容,我会收到一个JS错误:

TypeError:rangeStart未定义[了解更多信息] fullcalendar.js:11023:6

现在,我假设这是因为
rangeStart
显然没有正确设置,但是我似乎无法确定为什么不设置

\u prtCalendar.cshtml
在尝试
$(文档)之前先加载
fullcalendar.js
moment.min.js
。就绪
通过以下行调用

<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
调用中失败。 当从
Index.cshmtl
调用时,其他选项卡(在相同的
Index.cshmtl
中)上引用不同控制器的其他按钮将被正确调用


任何帮助都非常欢迎…:-)

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

$(文档)的底部。ready
是一行,上面写着:

CalLoading = false;
改为:

CalLoading = true;

这似乎解决了问题……

好吧,答案太简单了……真的

$(文档)的底部。ready
是一行,上面写着:

CalLoading = false;
改为:

CalLoading = true;
这似乎解决了问题