POST调用抛出null异常,而GET则不抛出

时间:2012-06-27 23:32:10

标签: jquery ajax asp.net-mvc post

我正在使用$ .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'。必须有一个可选参数   是引用类型,可空类型,或声明为可选

     

参数。参数名称:参数

2 个答案:

答案 0 :(得分:1)

这是因为文化与客户端和服务器的区别。使用GET请求时,默认模型绑定程序始终使用InvariantCulture将查询字符串参数解析为其基础类型discussed here。使用POST时,模型绑定器使用当前文化。因此,如果您在小数点分隔符为,而非.的服务器上使用文化,则POST请求将失败。

答案 1 :(得分:0)

取消traditional: true设置。

  

[data is]附加到GET请求的url。 ...对象必须是键/值对。如果   value是一个数组,jQuery使用相同的键序列化多个值   基于传统设置的价值