0

私は現在、単純なasp.net WebサイトにすばらしいjQueryプラグイン「週カレンダー」(ここ)を実装しようとしています。カレンダーにデータを送信し、クライアント側のイベント(イベントの作成、イベントの変更など)に応答するために、いくつかの[WebMethods]を設定しました。

WebMethodsを使用する場合のasp.netのオブジェクトの自動シリアル化は、データを送り返すときにうまく機能するようですが、逆の場合は問題が発生します。

カレンダーイベントをサーバーに送り返す問題のJavaScriptコードは次のとおりです。

save: function() {
                    calEvent.id = id;
                    id++;
                    calEvent.start = new Date(startField.val());
                    calEvent.end = new Date(endField.val());
                    calEvent.title = titleField.val();
                    calEvent.body = bodyField.val();

                    $calendar.weekCalendar("removeUnsavedEvents");
                    $calendar.weekCalendar("updateEvent", calEvent);
                    $dialogContent.dialog("close");
                    //SAVE TO DATABASE

                    $.ajax({
                        type: "POST",
                        url: "Tracker.aspx/AddEvent",
                        data: calEvent,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(data) {
                            alert("saved");
                        }
                    });

現在、サーバー上に「スタブメソッド」があり、逆シリアル化が機能することを確認しています。

[WebMthod]    
public static string AddEvent(Event e)
        {
            //save event to database and return something
            return "done";
    }

ただし、イベントを追加すると、次の例外が発生します。

無効なJSONプリミティブ:開始。

サーバーでは、イベントオブジェクトは次のように構成されています。

[DataContract]
public class Event
{
    [DataMember]
    public int id { get; set; }
    [DataMember]
    public string title { get; set; }
    [DataMember]
    public string body { get; set; }
    [DataMember]
    public string start { get; set; }
    [DataMember]
    public string end { get; set; }
}
4

1 に答える 1

0

Web サービスへの呼び出しを次のように変更すると、うまくいきます。

$.ajax({
                        type: "POST",
                        url: "Tracker.aspx/AddEvent",
                        data: '{e : ' + JSON.stringify(calEvent) + '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "text",
                        success: function(data) {
                            alert("saved");
                        }
                    });

JSON.stringify 関数を使用して、サーバーに送信される JSON の形式をいじる必要がありました。

于 2009-11-18T11:31:01.840 に答える