Mam żądanie ajax POST, które maprzekazywanie danych do działania ASP.NET MVC. Działa to dobrze w 95% przypadków, ale co jakiś czas, z dowolnego powodu, moja FormCollection jest pusta, co powoduje błędy aplikacji.
Uwzględniłbym wartości surowych żądań, jednak nie byłem w stanie ich odtworzyć.
Moje wywołanie ajax wygląda następująco:
var data = {};
data.Property = 123; // etc
$.ajax({
url: url,
type: "POST",
dataType: "json",
data: JSON.stringify(data),
success: function(viewModel) {
// do stuff
}
});
Co spowodowałoby, że FormCollection będzie okresowo pusta na ajax POST?
Podejrzewałem takie sytuacje jak przekroczenie limitu czasu sesji i podobne, ale spodziewałbym się, że błąd zniknie, zanim przejdę do akcji.
Odpowiedzi:
2 dla odpowiedzi № 1Przede wszystkim wydajesz się, że wysyłasz żądanie JSON (JSON.stringify(data)
). To nie jest obsługiwane po wyjęciu z pudełka w ASP.NET MVC 2. Jest to w ASP.NET MVC 3, że JsonValueProviderFactory
został wprowadzony. Możesz rzucić okiem na następujący artykuł co wyjaśnia bardziej szczegółowo żądania JSON w ASP.NET MVC.
Za każdym razem, gdy chcesz wysłać żądanie JSON, powinieneś ustawić odpowiedni typ zawartości używając contentType
parametr:
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
i wreszcie, ale nie mniej ważne, poleciłbym używać modeli widoku zamiast polegania na słabo wpisanych strukturach, takich jak FormCollection w twoich działaniach kontrolera i konieczności pisania kodu hydraulicznego.
AKTUALIZACJA:
FormCollection
jest kolekcją kluczy / wartości. Więc jeśli chcesz go użyć (pomimo moich zaleceń przeciwko niemu) nie powinieneś używać żądania JSON. Powinieneś użyć zwykłej prośby o wartość klucza. Dlatego usuń JSON.stringify z żądania AJAX i usuń również parametr contentType: "application / json". Naprawdę nie ma sensu używanie słabo wypróbowanej kolekcji par kluczy i wartości z obiektami JSON.