【问题标题】:POST call throws null exception while GET doesn'tPOST 调用抛出空异常,而 GET 没有
【发布时间】:2012-06-27 23:32:09
【问题描述】:

我正在使用 $.ajax() 向服务器发送 post call。如果我使用 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.List1[System.Int32], System.Collections.Generic.List1[System.String], System.Decimal)' 在 'RenkliTablo.Controllers.SepetController'。可选参数必须 是引用类型、可为空的类型或被声明为可选项

参数。参数名称:参数

【问题讨论】:

  • 为什么不能用get?..
  • 因为这是他应该用来将数据“发布”到服务器的方法

标签: jquery ajax asp.net-mvc post


【解决方案1】:

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

【讨论】:

  • 几天后我现在明白你的回答了
【解决方案2】:

去掉traditional: true 设置。

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

【讨论】:

  • 如果在操作中我将参数作为字符串而不是十进制,稍后将其解析为十进制,它可以工作。将 POST 与传统:true 设置一起使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2021-09-03
  • 2011-08-17
相关资源
最近更新 更多