【问题标题】:FullCalendar events from asp.net ASHX page not displaying来自 asp.net ASHX 页面的 FullCalendar 事件未显示
【发布时间】:2012-06-09 19:28:03
【问题描述】:

我一直在尝试使用以下代码调用 ASHX 页面,将一些事件添加到 fullCalendar。

页面脚本:

<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 页面并返回以下数据:

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

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

任何关于我如何使它工作的帮助或建议将不胜感激。

史蒂夫

【问题讨论】:

    标签: asp.net events fullcalendar


    【解决方案1】:

    以防万一有人偶然发现这个问题。我尝试了上述所有解决方案,但都没有奏效。 对我来说,问题是通过使用旧版本的 jquery 解决的。我从包含在 fullcalendar 包中的 1.5.2 版本切换到 1.3.2 版本

    【讨论】:

      【解决方案2】:

      史蒂夫, 我遇到了类似的事情——如果 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,title:'test 2',start:'2010-06-07', allDay: false}]

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

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

      【讨论】:

        【解决方案3】:

        您的 JSON 数据丢失了 end 项:

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

        【讨论】:

          【解决方案4】:

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

          • 调用 ASHX 页面并返回 ... 数据:

            所以服务器端部分工作正常,调用服务器端的代码工作正常。

          • 我将返回的值直接粘贴到它正确显示的事件中。

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

          从逻辑上讲,我们在这里看到将服务器响应连接到日历输入的代码不起作用。不幸的是,我不支持 jQuery fullCalendar 方法,但也许您缺少回调声明?

          【讨论】:

          • 感谢您的回复 Joel,我已经根据文档中的代码创建了 fullcalendar 脚本:$('#calendar').fullCalendar({ events: "/myfeed.php" });用我的 ascx 替换 php 页面,因此预计不需要回调,除非 php 页面的处理方式不同。
          【解决方案5】:

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

          【讨论】:

          • 谢谢你,但如果与日期相关,我会希望我直接粘贴在日历中的结果值不起作用。
          【解决方案6】:

          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、start、end、description、allDay 等)的事件。

          我知道这个帖子是一个旧帖子,但这将对其他用户有所帮助。

          只是整理所有的答案。

          【讨论】:

            【解决方案7】:

            我遇到了这个问题,并使用 .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 值使用…转换为 long 值

            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 插件可以在http://craigsworks.com/projects/qtip/找到

            希望这会有所帮助。

            【讨论】:

            • 我想做同样的事情,但日期范围和日期(星期几)。我可以使用 startDate 和 endDate 显示日历,但是如何使用 ashx 处理程序实现范围功能?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-21
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 2012-07-13
            • 1970-01-01
            相关资源
            最近更新 更多