3

次のコードを使用して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:'テスト 1',start: '2010-06-07',allDay: false},{id: 2,title:'テスト 2',start: '2010-06-07', allDay: false}]

ASHX ページを呼び出しても結果は表示されませんが、返された値をイベントに直接貼り付けると正しく表示されます。私は、このコードを 1 日間機能させようとしてきましたが、イベントが設定されない理由がわかりません。

これを機能させる方法についての助けやアドバイスをいただければ幸いです。

スティーブ

4

7 に答える 7

3

誰かがこの問題に出くわした場合に備えて。上記の解決策をすべて試しましたが、どれもうまくいきませんでした。私にとっては、古いバージョンのjqueryを使用することで問題が解決しました。fullcalendar パッケージに含まれていたバージョン 1.5.2 からバージョン 1.3.2 に切り替えました。

于 2012-01-26T14:55:07.567 に答える
1

あなたの JSON データはendアイテムを失いました:

{id: 0,title:'test 1',start: '2010-06-07',end: '2010-06-07',allDay: false}
于 2012-03-25T15:30:33.493 に答える
1

スティーブ、私は似たようなことに遭遇しました。JSON が fullCalendar 呼び出しに直接含まれている場合はイベントをレンダリングしますが、外部 URL からの同一の JSON はレンダリングしません。「id」、「title」、「start」、「end」、および「allDay」が引用符で囲まれるように JSON を変更することで、最終的に機能するようになりました。

したがって、これの代わりに (サンプル 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}]

さて、ローカルでは機能したのにリモートでは機能しなかった理由はわかりません。

于 2010-06-24T02:40:47.717 に答える
0

この問題に苦労し、次のように .ashx ハンドラーを使用して解決しました

私の戻りクラスは次のようになります...</p>

 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 値に変換されます。</p>

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

ProcessRequest は次のようになります。</p>

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);
    }

そして私のドキュメントの準備が整いました…</p>

>  $(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/ にあります。

お役に立てれば。

于 2012-06-09T11:28:03.873 に答える
0

日付の値と関係があるのではないかと思います。

于 2010-06-08T23:21:19.900 に答える
0

私たちが知っていることを見て、可能性を排除しましょう:

  • ASHX ページが呼び出され、次のデータが返されます。

    したがって、サーバー側の部分は問題なく機能しており、サーバー側を呼び出すコードも機能しています。

  • 返された値を、正しく表示されるイベントに直接貼り付けます。

    したがって、応答を処理するコードは正しく機能します。

論理的には、サーバーの応答をカレンダーの入力に接続するコードが機能していないことがわかります。残念ながら、私は jQuery の fullCalendar メソッドについて詳しく知りませんが、コールバック宣言が抜けているのではないでしょうか?

于 2010-06-07T17:03:34.860 に答える
0

asp.net ASHX ページからの FullCalendar イベントが表示されないことは、この問題の正しい解決策です。

そして、日付には長い形式を使用しました。

そして、 StringAppending の代わりに @Steve を使用できます:-

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

evList は、id、start、end、description、allDay などの必須プロパティを持つすべてのイベントを含むリストです。

このスレッドが古いスレッドであることは承知していますが、これは他のユーザーの役に立つでしょう。

すべての答えを照合するだけです。

于 2011-10-20T20:48:46.310 に答える