在ajax POST上没有填充FormCollection

时间:2011-11-20 23:56:44

标签: asp.net-mvc ajax asp.net-mvc-2 jquery

我有一个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 个答案:

答案 0 :(得分:2)

首先,您似乎正在发送JSON请求(JSON.stringify(data))。 ASP.NET MVC 2中不支持此功能。在ASP.NET MVC 3中引入了JsonValueProviderFactory。您可以查看following article,它详细解释了ASP.NET MVC中的JSON请求。

每次要发送JSON请求时,都应使用contentType参数设置正确的内容类型:

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

最后但并非最不重要的是,我建议您使用视图模型,而不是依赖于某些弱类型的结构,例如控制器操作中的FormCollection,并且必须编写管道代码。


更新:

FormCollection是一个键/值对集合。因此,如果您想使用它(尽管我建议不要使用它),您不应该使用JSON请求。您应该使用正常的键值请求。因此,从您的AJAX请求中删除JSON.stringify并删除co​​ntentType:' application / json'参数也是如此。使用带有JSON对象的弱类型键/值对集合真的没有意义。