События FullCalendar со страницы asp.net ASHX не отображаются - PullRequest
3 голосов
/ 07 июня 2010

Я пытался добавить некоторые события в 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 вызывается и возвращает следующие данные:

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

При вызове страницы ASHX никаких результатов не отображается, но если я вставлю значения, возвращенные непосредственно в события, он отобразится правильно. Я пытаюсь заставить этот код работать в течение дня и не могу понять, почему события не устанавливаются.

Буду признателен за любую помощь или совет, как я могу заставить это работать.

Steve

Ответы [ 7 ]

3 голосов
/ 26 января 2012

На случай, если кто-нибудь наткнется на эту проблему. Я перепробовал все вышеперечисленные решения, но ни одно из них не сработало. Для меня проблема была решена с помощью более старой версии jquery. Я перешел с версии 1.5.2, которая была включена в пакет fullcalendar, до версии 1.3.2

1 голос
/ 25 марта 2012

Ваши данные JSON потеряли элемент end:

{id: 0,title:'test 1',start: '2010-06-07',end: '2010-06-07',allDay: false}
1 голос
/ 24 июня 2010

Стив, я столкнулся с чем-то похожим - он отображал бы события, если бы JSON находился непосредственно в вызове fullCalendar, но не отображал бы идентичный JSON, исходящий из внешнего URL-адреса.Я наконец заставил его работать, изменив 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}]

Теперь, почему это работало локально, но не удаленно, я не могу сказать.

0 голосов
/ 09 июня 2012

Я боролся с этой проблемой и решил ее с помощью обработчика .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-соединением можно ознакомиться по адресу http://craigsworks.com/projects/qtip/

Надеюсь, это поможет.

0 голосов
/ 21 октября 2011

События FullCalendar со страницы asp.net ASHX, не отображающей , являются правильным решением проблемы.

И я использовал длинный формат для дат.

И @Steve вместо StringAppending мы можем использовать: -

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

evList - ваш список, содержащий все события, которые имеют такие важные свойства, как id, начало, конец, описание, allDay и т. Д.

Я знаю, что эта тема старая, но это будет полезно другим пользователям.

Просто сопоставляя все ответы.

0 голосов
/ 09 июня 2010

Я думаю, что это может иметь какое-то отношение к вашим значениям даты.

0 голосов
/ 07 июня 2010

Давайте посмотрим на то, что мы знаем, и исключим возможности:

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

    Таким образом, часть на стороне сервера работает нормально, и код для вызова на стороне сервера работает.

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

    Таким образом, код, который обрабатывает ответ, работает правильно.

Логически мы видим здесь, что код, который связывает ваш ответ сервера с входом вашего календаря, не работает. К сожалению, я не знаком с методом jQuery fullCalendar, но, возможно, вам не хватает объявления обратного вызова?

...