Pergunta

Atualmente, estou tentando implementar o maravilhoso jQuery plugin 'Week Calendar' (aqui) no meu site simples do ASP.NET. Eu configurei alguns [webMethods] para enviar dados para o calendário e responder aos eventos do lado do cliente (criando eventos, modificando eventos etc.).

A serialização automática de objetos do ASP.NET ao usar webMethods parece funcionar bem ao enviar os dados de volta, mas quando o inverso está acontecendo, estou enfrentando problemas.

O código JavaScript em questão que envia o evento do calendário de volta ao servidor é o seguinte:

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

Atualmente, eu só tenho um 'método de stub' no servidor para verificar se a desperalização funciona:

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

No entanto, estou pegando a seguinte exceção ao adicionar um evento:

JSON inválido Primitivo: Start.

No servidor, meu objeto de evento é constituído da seguinte forma:

[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; }
}
Foi útil?

Solução

Modificando a chamada para o serviço da web da seguinte maneira fez o truque:

$.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");
                        }
                    });

Só tive que mexer com o formato do JSON sendo enviado ao servidor usando a função JSON.Stringify

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top