我有一个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上间歇性地为空?
我怀疑会话超时之类的事情,但我希望在我采取行动之前出错。
答案 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并删除contentType:' application / json'参数也是如此。使用带有JSON对象的弱类型键/值对集合真的没有意义。