json feed事件:当控制器没有参数时,只调用控制器

时间:2016-01-18 05:24:44

标签: c# json fullcalendar

我正在尝试实现json提要FullCalendar。

如果我对没有参数的GetCalendarEvents使用签名,则View会调用该函数。如果我将它与start和end参数一起使用,则不会调用该函数。我能在代码中找到的唯一不同之处就是样本中的代码是他们以某种方式在视图中调用脚本而没有我必须放入的头信息。

视图中的标头代码

<link rel='stylesheet' href='~/Content/fullcalendar.css' />
<link rel='stylesheet' href='~/Content/scheduler.css' />
<script src='~/Scripts/jquery-2.2.0.js'></script>
<script src='~/Scripts/moment.min.js'></script>
<script src='~/Scripts/fullcalendar.js'></script>
<script src='~/Scripts/moment.js'></script>
<script src='~/Scripts/scheduler.js'></script>

这可以在我从这里下载的示例代码中正常工作。 http://www.codeproject.com/Articles/638674/Full-calendar-A-complete-web-diary-system-for-jQue

以下是相关代码。

查看代码

$('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        defaultView: 'agendaDay',
        editable: true,
        allDaySlot: false,
        selectable: true,
        slotMinutes: 15,
        events: '/Calendar/GetCalendarEvents/'
        });

控制器代码

public JsonResult GetCalendarEvents(double start, double end)
    //public JsonResult GetCalendarEvents()
    {
        var fromDate = CalendarEvent.ConvertFromUnixTimestamp(start);
        var toDate = CalendarEvent.ConvertFromUnixTimestamp(end);

        var rslt = _orderService.Query(s => s.FromDate >= fromDate && s.ToDate <= toDate);

        List<CalendarEvent> result = new List<CalendarEvent>();
        CalendarEvent rec = new CalendarEvent();
        rec.ID = "lskfj1231";
        rec.title = "Testing";
        rec.start = "2016-01-17T12:00:00Z";
        rec.end = "2016-01-17T13:00:00Z";
        result.Add(rec);

        var eventList = from e in result
                        select new
                        {
                            id = e.ID,
                            title = e.title,
                            start = e.start,
                            end = e.end
                        };
        var rows = eventList.ToArray();            
        return Json(rows, JsonRequestBehavior.AllowGet);
    }

4 个答案:

答案 0 :(得分:1)

我整理出来了。由于未知的原因(我将在某个时候对此进行研究并更新此解决方案)示例项目/解决方案以控制方式向控制器发送以unix时间格式的开始和结束参数的请求。我的项目/解决方案以DateTime格式向控制器发送开始和结束参数的请求。

我刚刚在Calendar控制器中为GetCalendarEvents(DateTime start,DateTime end)修改了我的签名,一切都很棒。

谢谢!

答案 1 :(得分:0)

$('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        data : {start : 11, end : 15}
        defaultView: 'agendaDay',
        editable: true,
        allDaySlot: false,
        selectable: true,
        slotMinutes: 15,
        events: '/Calendar/GetCalendarEvents/'
        });

您需要在数据参数

中传递属性

答案 2 :(得分:0)

您可以通过两种方式使用它。

1)作为json feed的事件

eventSources: [

        // your event source
        {
            url: '/Calendar/GetCalendarEvents/',
            type: 'GET',
            data: {
                start: startDate,
                end: endDate
            },
            error: function() {
                alert('there was an error while fetching events!');
            }
        }
    ]

2)事件作为一种功能

events: function(start, end, timezone, callback) {
        $.ajax({
            url: '/Calendar/GetCalendarEvents/',
            data: {
                // our hypothetical feed requires UNIX timestamps
                start: start.unix(),
                end: end.unix()
            },
            success: function(events) {
                callback(events);
            }
        });
    }

答案 3 :(得分:0)

在您下载的示例代码中,这是在fullcalendar.js文件中处理的。看看第984行的_fetchEventSource方法()。

我认为这是将日期添加到控制器方法调用中的位置。您可以跟踪代码以查看它是否正在通过js文件运行,但我的猜测是您没有按正确的顺序包含此文件,因此它不能使用fullcalendar.js中的方法文件。