将FullCalendar-asp-net项目更新到最新的1.6.4版本

时间:2013-09-26 12:38:04

标签: jquery asp.net fullcalendar ashx

我正在尝试使用最新版本的fullcalendar脚本更新fullcalendar-asp-net项目。该项目使用1.4.7版本的fullcalendar(这是非常古老的)与jquery 1.3.2(也很老)。我喜欢该项目的整个功能,所以我只是想通过jquery 1.10.2将其更新到fullcalendar的1.6.4(最新版本)(最后一个版本随jquery版本一起提供)。

我遇到的问题是,当我更新脚本时,我无法从处理程序中显示事件。我所做的唯一更改是更改页眉上的脚本,如:

  • Jquery 1.3.2至1.10.2
  • Jquery-UI到1.10.3
  • FullCalendar 1.4.7至1.6.4

所有后端方法都正常工作,所以我可以添加新事件并将它们保存到db并更新它们没有问题。当我重新加载页面时,它们都消失了(意味着它们没有加载)。这是应该在pageload上加载日历的js代码(为了简化,删除了不需要的代码)。

var calendar = $('#calendar').fullCalendar({
    events: "JsonResponse.ashx",
})

奇怪的是,当我将json响应直接复制并粘贴到事件时,它们都会出现。代码是这样的:

var calendar = $('#calendar').fullCalendar({
    events: [{ id: '42', title: 'asdf', start: 1378771200, end: 1378944000, allDay: true, description: 'asdfasdf' },
        { id: '43', title: 'sadfsdf', start: 1378944000, end: 1379030400, allDay: true, description: 'asdfgadfasdfd' },
        { id: '44', title: 'asdf', start: 1379030400, end: 1379030400, allDay: true, description: 'asdfasdf' }]
})

我开始考虑在fullcalendar的版本1.4.7和1.6.4之间,加载事件应该有所不同。当我查看文档时,我看到的与我完全相同。是不是只是向事件发送JSON字符串?由ashx处理程序生成的JSON字符串是正确的,因此当我直接复制并粘贴它时它会起作用。

我在这里有点迷失,浪费了足够的时间寻找相关信息和阅读基础知识。最后来到这里希望有人能指出我正确的方向。

注意:我没有编写ashx代码,认为它不重要,因为它创建了一个有效的JSON字符串,可以在fullcalendar-asp-net项目中找到它。

谢谢!

1 个答案:

答案 0 :(得分:2)

最后,我最终修改了“fullcalendar-asp-net”项目中的原始ashx处理程序。我没有在foreach循环中向字符串添加事件,而是使用此代码创建了一个事件列表并将其转换为Json字符串。

System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
   new System.Web.Script.Serialization.JavaScriptSerializer();
   string sJSON = oSerializer.Serialize(tasksList);

   context.Response.Write(sJSON);

完整的ashx代码是这样的。

/// <summary>
/// Summary description for JsonResponse
/// </summary>
public class JsonResponse : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        //CONVERT FROM UTC TIMESTAMP TO LOCAL DATETIME
        DateTime start = ConvertFromTimeStamp(long.Parse(context.Request.QueryString["start"]));
        DateTime end = ConvertFromTimeStamp(long.Parse(context.Request.QueryString["end"]));

        List<int> idList = new List<int>();
        List<ImproperCalendarEvent> tasksList = new List<ImproperCalendarEvent>();

        //GENERATE JSON SERIALIZABLE EVENTS
        foreach (CalendarEvent cevent in EventDAO.getEvents(start, end))
        {
            tasksList.Add(new ImproperCalendarEvent
            {
                id = cevent.id,
                title = cevent.title,
                start = ConvertToTimestamp(Convert.ToDateTime(cevent.start).ToUniversalTime()).ToString(),
                end = ConvertToTimestamp(Convert.ToDateTime(cevent.end).ToUniversalTime()).ToString(),
                description = cevent.description,
                allDay = cevent.allDay,
            }
                );
            idList.Add(cevent.id);
        }

        context.Session["idList"] = idList;

        //SERIALIZE EVENTS TO STRING
        System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
         new System.Web.Script.Serialization.JavaScriptSerializer();
        string sJSON = oSerializer.Serialize(tasksList);

        //WRITE JSON TO RESPONSE OBJECT
        context.Response.Write(sJSON);
    }

    /// <summary>
    /// Converts a UTC transformed timestamp into a local datetime
    /// </summary>
    /// <param name="timestamp"></param>
    /// <returns></returns>
    private DateTime ConvertFromTimeStamp(long timestamp)
    {
        long ticks = (timestamp * 10000000) + 621355968000000000;
        return new DateTime(ticks, DateTimeKind.Utc).ToLocalTime();
    }

    private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    private static long ConvertToTimestamp(DateTime value)
    {
        TimeSpan elapsedTime = value - Epoch;
        return (long)elapsedTime.TotalSeconds;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

当我问这个问题时,我使用的是web方法而不是那个处理程序,所以调用日历的js代码与应该的不同。现在,我使用的方法与fullcalendar官方文档中解释的完全相同。等;

$('#calendar').fullCalendar({
events: '/myfeed.php', }); // for me, that is "JsonResponse.ashx"

现在它适用于我在问题中提到的所有脚本的最新版本。 Jquery 1.10.2,Jquery-UI 1.10.3和fullcalendar 1.6.4。它完美无缺!

我希望那些无法解决问题的人不会像我一样受苦:)

谢谢!