0

我有FullCalendar(1.5.1 版)在.net网络表单应用程序中完美运行。我正在尝试在我的新asp.net-mvc应用程序中部署 1.5.3 版。出于某种原因,我无法在动态提供事件时显示这些事件。

我必须完全控制每个事件(颜色、边框、属性等),并且我正在传递一个JSON包含所有相关细节的字符串。如果我手动输入JSON结果events:,它会按预期显示。但是当我尝试动态设置它时,我什么也得不到。

对于简单的测试,我在数据调用中硬编码了开始和结束时间段,如下所述:

$.ajax({
    url: rootUrl + "../Schedule/GetCal?&start=1341129400&end=1344146400",
    type: 'POST'
}).success(function(data){
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },
        titleFormat: { day: '' },
        defaultView: _thisView,
        events: [data]
    });

以下是data从 Chrome 复制的值:

{id:"5BFAA9C3-9437-49B0-A657-5DA47CDEA409",projectId:"5BFAA9C3-9437-49B0-A657-5DA47CDEA409",title:"Orem City Parking Lot",start:"2012-07-11",end:"",allDay:"true",type:"goal",textColor:"white",backgroundColor:"green",borderColor:"black",crew:""},
{id:"33910A42-C5F0-42FA-AB36-C315BDDAF964",projectId:"33910A42-C5F0-42FA-AB36-C315BDDAF964",title:"Thanksgiving Point - Buster",start:"2012-07-28",end:"",allDay:"true",type:"goal",textColor:"white",backgroundColor:"green",borderColor:"black",crew:""}

如果我采用相同的信息并将原始调用更改为以下内容:

    $.ajax({
    url: rootUrl + "../Schedule/GetCal?&start=1341129400&end=1344146400",
    type: 'POST'
}).success(function(data){
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },
        titleFormat: { day: '' },
        defaultView: _thisView,
        events: [
           {id:"5BFAA9C3-9437-49B0-A657-5DA47CDEA409",projectId:"5BFAA9C3-9437-49B0-A657-5DA47CDEA409",title:"Orem City Parking Lot",start:"2012-07-11",end:"",allDay:"true",type:"goal",textColor:"white",backgroundColor:"green",borderColor:"black",crew:""},
           {id:"33910A42-C5F0-42FA-AB36-C315BDDAF964",projectId:"33910A42-C5F0-42FA-AB36-C315BDDAF964",title:"Thanksgiving Point - Buster",start:"2012-07-28",end:"",allDay:"true",type:"goal",textColor:"white",backgroundColor:"green",borderColor:"black",crew:""}
        ]
    });

一切都按预期显示。

为什么手动设置时有效,而动态设置无效?我错过了什么?

4

3 回答 3

1

我终于弄明白了。警报(数据)非常有帮助。

从数据库获取数据时,我需要将其格式化为数组。

这篇文章对于使其在John's McBlog中发挥作用至关重要。

我没有将序列化为DataTable字符串JSON,而是将其放入 aList<>并转换.ToArray()如下:

DataTable projSchDt = BLL.Project.getProjectsSchedule(ccUser.CompanyId, start, end, ccUser.Id, true);
var events = new List<BLL.Event>();

foreach (DataRow row in projSchDt.Rows)
{
    events.Add(new BLL.Event(){
       id = row["id"].ToString(),
       projectId = row["projectId"].ToString(),
       title = row["title"].ToString(),
       start = row["start"].ToString(),
       end = row["end"].ToString(),
       allDay = Convert.ToBoolean(row["allDay"]),
       type = row["type"].ToString(),
       textColor = row["textColor"].ToString(),
       backgroundColor = row["backgroundColor"].ToString(),
       borderColor = row["borderColor"].ToString(),
       crew = row["crew"].ToString()
    });
}
var rows = events.ToArray();
return Json(rows, JsonRequestBehavior.AllowGet);

Bll.Event只是定义事件的自定义类。

我修改了这样的js:

$('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,basicWeek,basicDay'
    },
    titleFormat: { day: '' },
    defaultView: _thisView,
    events: rootUrl + "../Schedule/GetCal"
});

现在一切都按预期工作。

于 2012-07-27T17:19:46.023 回答
0

我猜你的data变量已经是一个数组。所以试试:

events: data

而不是events: [data].

于 2012-07-26T06:28:08.623 回答
0

从 $.ajax() 帖子返回的数据可能只是 javascript 对象的字符串表示形式,而不是 javascript 对象,

尝试添加 'json' 的 dataType 选项以从 ajax 请求返回一个 javascript 对象,

$.ajax({
    url: rootUrl + "../Schedule/GetCal?&start=1341129400&end=1344146400",
    type: 'POST',
    dataType: 'json',
    success: function(data){
        $('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,basicWeek,basicDay'
            },
            titleFormat: { 
                day: '' 
            },
            defaultView: _thisView,
            events: data
        });
    }
});
于 2012-07-26T23:38:59.997 回答