我正在使用$ .ajax()向服务器发送一个帖子调用。如果我使用POST作为类型,它会给出错误,但是如果我使用GET它会完美地运行。
问题是,在执行POST时,服务器端的参数unitTotal
为空。但是在执行GET时,该参数被正确传递。
这是ajax代码:
$.ajax({
type: "POST",
url: '/Sepet/SepeteTabloEkle',
data: { "tabloId": tabloId, "en": en, "boy": boy, "accessoryIds": accessoryIds, "miscTypes": miscTypes, "unitTotal": total },
traditional:true,
success: function (data) {
},
});
这是我的行动定义:
[HttpPost]
public void SepeteTabloEkle(int tabloId, int en, int boy, List<int> accessoryIds, List<string> miscTypes, decimal unitTotal )
如果我使用POST,这是服务器给出的错误。如果我使用GET,则不会抛出此错误,并且unitTotal
可以很好地传递。
错误:
参数字典包含参数的空条目 方法'Void'的非可空类型'System.Decimal'的'unitTotal' SepeteTabloEkle(Int32,Int32,Int32, System.Collections.Generic.List
1[System.Int32], System.Collections.Generic.List
1 [System.String],System.Decimal)'in 'RenkliTablo.Controllers.SepetController'。必须有一个可选参数 是引用类型,可空类型,或声明为可选参数。参数名称:参数
答案 0 :(得分:1)
这是因为文化与客户端和服务器的区别。使用GET请求时,默认模型绑定程序始终使用InvariantCulture
将查询字符串参数解析为其基础类型discussed here。使用POST时,模型绑定器使用当前文化。因此,如果您在小数点分隔符为,
而非.
的服务器上使用文化,则POST请求将失败。
答案 1 :(得分:0)
取消traditional: true
设置。
[data is]附加到GET请求的url。 ...对象必须是键/值对。如果 value是一个数组,jQuery使用相同的键序列化多个值 基于传统设置的价值