/ / FormCollection nie zaludnione na ajax POST - asp.net-mvc, ajax, asp.net-mvc-2, jquery

FormCollection nie jest zapełniany na ajax POST - asp.net-mvc, ajax, asp.net-mvc-2, jquery

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 № 1

Przede 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.