2010-06-07 65 views
3

我一直在尝试使用以下代码使用对ASHX页面的调用将一些事件添加到fullCalendar。来自asp.net的FullCalendar事件ASHX页面不显示

页脚本:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      header: { 
       left: 'prev,next today', center: 'title', right: 'month, agendaWeek,agendaDay' 
      }, 
      events: 'FullCalendarEvents.ashx' 

     })     
    }); 
</script> 

C#代码:

public class EventsData 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    public string start { get; set; } 
    public string end { get; set; } 
    public string url { get; set; } 
    public int accountId { get; set; } 
} 

public class FullCalendarEvents : IHttpHandler 
{ 

    private static List<EventsData> testEventsData = new List<EventsData> 
    { 
     new EventsData {accountId = 0, title = "test 1", start = DateTime.Now.ToString("yyyy-MM-dd"), id=0}, 
     new EventsData{ accountId = 1, title="test 2", start = DateTime.Now.AddHours(2).ToString("yyyy-MM-dd"), id=2} 
    }; 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "application/json."; 
     context.Response.Write(GetEventData()); 
    } 

    private string GetEventData() 
    { 
     List<EventsData> ed = testEventsData; 
     StringBuilder sb = new StringBuilder(); 

     sb.Append("["); 

     foreach (var data in ed) 
     { 
      sb.Append("{"); 
      sb.Append(string.Format("id: {0},", data.id)); 
      sb.Append(string.Format("title:'{0}',", data.title)); 
      sb.Append(string.Format("start: '{0}',", data.start)); 
      sb.Append("allDay: false"); 
      sb.Append("},"); 
     } 
     sb.Remove(sb.Length - 1, 1); 
     sb.Append("]"); 
     return sb.ToString(); 
    } 


} 

的ASHX页面被调用和returnd以下数据:

[{ID:0,标题:”测试1',开始:'2010-06-07',allDay:false},{id:2,title:'test 2',start:'2010-06-07',allDay:false}]

对ASHX页面的调用不显示任何结果,但是如果我将直接返回的值粘贴到正确显示的事件中。我是我一直试图让这个代码工作一天,我不明白为什么事件没有设置。

任何帮助或建议如何我能得到这个工作,将不胜感激。

史蒂夫

回答

0

让我们看看我们所知道的,并消除可能:

  • The ASHX page gets called and returnd the ... data:

    所以服务器端的部分工作得很好,而且代码叫出到服务器端工作中。

  • I paste the values returned directly into the events it displays correctly.

    所以处理响应的代码正常工作。

从逻辑上讲,我们在这里看到,连接您的服务器响应您的日历输入不能正常工作的代码。不幸的是,我没有使用jQuery fullCalendar方法,但也许你错过了一个回调声明?

+0

感谢您的答复乔尔, 我已经创建了一个基于从它的代码fullcalendar脚本的文档: $( '#日历')fullCalendar({ 事件: “/myfeed.php” }); 用我的ascx替换php页面,所以会有预期不需要回调,除非php页面处理不同。 – 2010-06-08 10:55:35

0

我认为这可能与您的日期值有关。

+0

感谢您的支持,但是如果与日期相关,我会期望我在日历中直接粘贴的结果值不起作用。 – 2010-06-09 11:06:14

1

Steve, 我遇到了类似的情况 - 如果JSON直接在fullCalendar调用中,它会呈现事件,但它不会呈现来自外部URL的identicla JSON。我终于通过修改JSON来实现它,以便“id”,“title”,“start”,“end”和“allDay”在他们周围引用引号。

所以不是这个(使用您的示例JSON): [{id:0,title:'test 1',start:'2010-06-07',allDay:false},{id:2,标题:'test 2',开始:'2010-06-07',allDay:false}]

...我有这个: [{“id”:0,“title”:“test 1” ,“开始”:“2010-06-07”,“allDay”:false},{“id”:2,“title”:“test 2”,“start”:“2010-06-07”,“allDay “:false}]

现在,为什么它在本地但不是远程工作,我不能说。

0

FullCalendar events from asp.net ASHX page not displaying是该问题的正确解决方案。

而且我使用长格式的日期。

而且@Steve代替StringAppending我们可以使用: -

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
new System.Web.Script.Serialization.JavaScriptSerializer(); 
String sJSON = oSerializer.Serialize(evList); 

evList是您含有具有像ID基本属性的所有事件列表,开始,结束,描述,阿迪等。

我知道这个线程是一个旧线程,但这对其他用户会有所帮助。

只是整理所有的答案。

3

如果有人发现这个问题。我尝试了所有上述解决方案,但都没有工作。 对我来说,问题是通过使用旧版本的jquery解决的。我从1.5.2版本切换它被列入fullcalendar包版本1.3.2

+0

+1非常感谢。它对我很有帮助 – 2014-05-15 10:15:20

1

你的JSON数据丢失end项目:

{id: 0,title:'test 1',start: '2010-06-07',end: '2010-06-07',allDay: false} 
0

我这个问题挣扎并使用.ashx的解决它处理程序如下

我的回报类是什么样子......

public class Event 
    { 
     public Guid id { get; set; } 
     public string title { get; set; } 
     public string description { get; set; } 
     public long start { get; set; } 
     public long end { get; set; } 
     public bool allDay { get; set; } 
    } 

哪里DateTime值使用转换为长值...

private long ConvertToTimestamp(DateTime value) 
    { 
     long epoch = (value.ToUniversalTime().Ticks - 621355968000000000)/10000000; 
     return epoch; 
    } 

而且的ProcessRequest看起来像......

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/html"; 
     DateTime start = new DateTime(1970, 1, 1); 
     DateTime end = new DateTime(1970, 1, 1); 
     try 
     { 
      start = start.AddSeconds(double.Parse(context.Request.QueryString["start"])); 
      end = end.AddSeconds(double.Parse(context.Request.QueryString["end"])); 
     } 
     catch 
     { 
      start = DateTime.Today; 
      end = DateTime.Today.AddDays(1); 
     } 
     List<Event> evList = new List<Event>(); 
     using (CondoManagerLib.Linq.CondoDataContext Dc = new CondoManagerLib.Linq.CondoDataContext(AppCode.Common.CGlobals.DsnDB)) 
     { 
      evList = (from P in Dc.DataDailySchedules 
         where P.DateBeg>=start && P.DateEnd<=end 
         select new Event 
         { description = P.Description, 
          id = P.RecordGuid, 
          title = P.Reason, 
          start = ConvertToTimestamp(P.DateBeg), 
          end = ConvertToTimestamp(P.DateEnd), 
          allDay = IsAllDay(P.DateBeg, P.DateEnd) 
         }).ToList(); 
     } 
     System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     String sJSON = oSerializer.Serialize(evList); 
     context.Response.Write(sJSON); 
    } 

我的文档准备...

> $(document).ready(function() { 
>    $('#calendar').fullCalendar({ 
>     header: { left: 'title', center: 'prev,today,next', right: 'month,agendaWeek,agendaDay' }, 
>     editable: false, 
>     aspectRatio: 2.1, 
>     events: "CalendarEvents.ashx", 
>     eventRender: function (event, element) { 
>      element.qtip({ 
>       content: event.description, 
>       position: { corner: { tooltip: 'topLeft', target: 'centerLeft'} }, 
>       style: { border: { width: 1, radius: 3, color: '#000'}, 
>        padding: 5, 
>        textAlign: 'center', 
>        tip: true, 
>        name: 'cream' 
>       } 
>      }); 
>     } 
>    }) 
>   }); 

的qTip pluging可以在http://craigsworks.com/projects/qtip/

希望这有助于找到。

+0

我想要做同样的事情,但是使用日期范围和dow(星期几)。我能够使用startDate和endDate显示日历,但是如何使用ashx处理程序实现范围功能? – sohaiby 2015-08-02 13:10:06