FormCollection не заполняется на ajax POST - PullRequest
1 голос
/ 21 ноября 2011

У меня есть ajax-запрос POST, который должен отправлять данные в действие ASP.NET MVC.Это работает нормально в 95% случаев, но время от времени по какой-либо причине мой FormCollection пуст и в результате возникают ошибки приложения.

Я бы включил необработанные значения запроса, однако я не былЯ могу воспроизвести это сам.

Мой вызов ajax выглядит следующим образом:

var data = {};
data.Property = 123; // etc

$.ajax({
    url: url,
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(data),
    success: function(viewModel) {
        // do stuff
    }
});

Что может привести к тому, что FormCollection периодически будет пустым на ajax POST?

Я подозревал такие вещи, как тайм-аут сеанса и тому подобное, но я ожидал, что это произойдет с ошибкой, прежде чем я приступлю к действию.

1 Ответ

2 голосов
/ 21 ноября 2011

Прежде всего вы, похоже, отправляете запрос JSON (JSON.stringify(data)). Это не поддерживается "из коробки" в ASP.NET MVC 2. В ASP.NET MVC 3 было введено JsonValueProviderFactory. Вы можете взглянуть на следующую статью , которая более подробно объясняет запросы JSON в ASP.NET MVC.

Также каждый раз, когда вы хотите отправить JSON-запрос, вы должны установить правильный тип контента, используя параметр contentType:

data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',

и последнее, но не менее важное: я бы порекомендовал вам использовать модели представлений вместо того, чтобы полагаться на некоторые слабо типизированные структуры, такие как FormCollection, в действиях вашего контроллера и на необходимость написания кода.


UPDATE:

FormCollection - коллекция пар ключ / значение. Поэтому, если вы хотите использовать его (несмотря на мою рекомендацию против него), вам не следует использовать запрос JSON. Вы должны использовать обычный запрос значения ключа. Поэтому удалите JSON.stringify из своего AJAX-запроса и также удалите параметр contentType: 'application / json'. В действительности нет смысла использовать коллекцию пар ключ / значение со слабым типом для объектов JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...