Pass json/javascript-Daten/Objekte c# - Funktion mit ajax
Ich bin mit FullCalendar (http://arshaw.com/fullcalendar/) und ich brauche Hilfe mit übergabe von Daten mittels json an eine c# - Funktion in der code-behind-Seite meiner ASP.net Seite.
Ich bin mit json-Daten laden, wie also in meiner FullCalendar web-Anwendung:
Code hinter:
[WebMethod]
public static List<Event> GetEvents()
{
List<Event> events = new List<Event>();
events.Add(new Event()
{
EventID = 1,
EventName = "EventName 1",
StartDate = DateTime.Now.ToString("MM-dd-yyyy"),
EndDate = DateTime.Now.AddDays(2).ToString("MM-dd-yyyy"),
EventColor = "red"
});
events.Add(new Event()
{
EventID = 2,
EventName = "EventName 2",
StartDate = DateTime.Now.AddDays(4).ToString("MM-dd-yyyy"),
EndDate = DateTime.Now.AddDays(5).ToString("MM-dd-yyyy"),
EventColor = "green"
});
return events;
}
asp.x x x Seite:
events: function(start, end, callback)
{
$.ajax(
{
type: 'POST',
contentType: 'application/json',
data: "{}",
dataType: 'json',
url: "Calendar.aspx/GetEvents",
cache: false,
success: function (response) {
var events = $.map(response.d, function (item, i) {
var event = new Object();
event.id = item.EventID;
event.start = new Date(item.StartDate);
event.end = new Date(item.EndDate);
event.title = item.EventName;
event.color = item.EventColor;
return event;
})
callback(events);
},
error: function (err) {
alert('Error');
}
});
},
Dies gut funktioniert. Jetzt möchte ich das speichern von Daten durch aufrufen einer Funktion und übergabe der Daten. Hier ist, was ich bisher getan habe:
Code hinter:
[WebMethod]
public static bool SaveEvents(List<Event> events)
{
//iterate through the events and save to database
return true;
}
asp.x x x Seite
function save() {
var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents');
var events = $.map(eventsFromCalendar, function (item, i) {
var event = new Object();
event.id = item.id;
event.start = item.start;
event.end = item.end;
event.title = item.title;
event.color = item.color;
return event;
});
$.ajax(
{
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(events), **<-- I have to pass data here but how???**
dataType: 'json',
url: "Calendar.aspx/SaveEvents",
cache: false,
success: function (response) {
alert('Events saved successfully');
},
error: function (err) {
alert('Error Saving Events');
}
});
return false;
}
Den oben genannten ajax-post ist, wo ich Hilfe benötige. Die variable Ereignisse contais alle FullCalendar event-info.
Wie übertrage ich die Daten 'events' um die Funktion 'SaveEvents'?
Ändern kann ich die SaveEvents Signatur, wenn es sein muss.
BEARBEITEN
Wenn ich meine c# - Funktion um ein array zu verwenden, wie s0:
[WebMethod]
public static bool SaveEvents(Event[] newEvents)
{
return true;
}
Auf und übergibt die folgenden Daten durch:
data: JSON.stringify({ newEvents: events }),
Dann die Funktion 'SaveEvents' aufgerufen wird, mit einem array der Größe 4, aber die Daten alle Werte null sind, warum ist das so?
Dank
InformationsquelleAutor Harry Boy | 2014-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offensichtlich aus dem code, dass Sie eine c# - Klasse als
So nehmen json-array. Ein Beispiel hier
//Array, welche würden zur Verfügung gestellt werden c# - Methode, wie Daten
Nun den ajax-request übergibt JSON-Objekte gepostet URL
Update :
Sicher zu stellen, dass es nichts falsch, bitte testen Sie Ihre Save-Veranstaltungen als. Wenn es geht in Ordnung soll so gut funktionieren, Wie es für mich funktioniert 🙂
So haben Sie die probelem in etwas anderes.. Siehe meine aktualisierte Antwort. vor der Prüfung Sie, (wie es ist), müssen Sie testen, um zu schlagen Ihre web-Methode und übergeben Sie einen einfachen string oder int. Nach sussess, das zu tun. Über die Antwort wird so gut funktionieren. Versuchen Sie mit einfachen int oder stirng:)
Danke für die Antwort aktualisiert. Ich kann nur Ihre einfache Beispiel funktioniert, wenn ich die folgenden änderungen vornehmen: 1. Ändern contentType: 'json' , contentType: 'application/json' und 2. Use data: JSON.stringify({ EventName: 'myevet 1' }) anstatt der Daten: { EventName: 'myevet 1' },
Wissen Sie, warum dies sein könnte? Vielleicht ist das warum kann ich nicht bekommen, der andere Teil arbeitet....
InformationsquelleAutor Sami