【问题标题】:ASP.NET MVC receives "null" as a string instead of nullASP.NET MVC 接收“null”作为字符串而不是 null
【发布时间】:2012-01-16 21:39:33
【问题描述】:

我的 json 或 ASP.NET MVC 有问题,我正在使用 ASP.NET MVC,这是我从客户端发送的内容。

注意 在 Chrome 中调试后,我解释说这是在 javascript 中传递的内容,我没有手动将 State 设置为 null,因为它是来自其他地方的结果为 null。这又一次不在我的控制范围内,因为它来自数据库。

在调试时,State 显示为 null,而不是“null”,但在 MVC 中调试时,它显示的是“null”而不是 null。

$.ajax(
   '/Client/Post',
   {
       method: 'POST',
       data: {
                 Country: 'US',
    // this is null because it is coming from somewhere else as null
                 State: null
             }
   });

我的 ASP.NET MVC 处理程序接收...

public ActionResult Post(Client model){
    if(model.State == "null") 
    {
         /// this is true... !!!!
    }
    if(model.State == null )
    {
         // :( this should be true...
    }
}

是 ASP.NET MVC 还是 jQuery 的问题?

那么是 jQuery 将 null 作为“null”发送还是 MVC 将 null 设置为“null”?

解决方案

我不得不递归地创建新的对象层次结构(克隆对象)并将其发送到 jQuery,因为 jQuery 以 Form Encoded 形式发送数据,其中无法表示 null,但理想情况下 jQuery 不应该在全部。

【问题讨论】:

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

不发送字段:

$.ajax('/Client/Post',
{
   method: 'POST',
   data: {
             Country: 'US'
         }
});


在我重新阅读您的帖子后进行编辑
var data = {
                 Country: 'US',
                 State: null
             }
if (!data.State) delete data.State;
$.ajax('/Client/Post',
    {
       method: 'POST',
       data: data
    }
});

这和上面的原理完全一样,仅供参考

【讨论】:

  • READ,它来自数据库作为其他地方的结果,我刚刚写了一个较小的代码来解释这种情况,我不能将它设置为空,也当从 MVC 检索结果,JSON 将 State 正确解析回 null 而不是“null”。
  • @AkashKava,了解 http 的工作原理。服务器和客户端之间的所有消息都是纯字符串。我已经为你链接了这个。您需要显式解析才能将字符串 "null" 转换为 ASP.NET null 值,因为它显然不会自动为您执行此操作。 JSON 将 PURE 字符串解析为 javascript 对象表示,因此从服务器发送的“null”当然是 javascript 中的真实 null 值。如此愤怒......
  • @Esailija,学习 HTTP 与此无关,我们有完全相同的应用程序可以在 iOS、Flex、Silverlight 上运行,所有 null 都正确转换,与我的学习无关在 http 中,json 对 null 有正确的规定很简单,它应该被正确解析或转换。可以看截图,要么是jQuery,要么是mvc做错了。
  • @AkashKava,"country=US&State=null",不是 json。发送到服务器的 Json 看起来像 'json={"country": "US", "State": null}'(预编码)请注意,它仍然是一个字符串,因为这是您可以发送到服务器的唯一内容......然后您需要在服务器上对其进行 json 解码。跨度>
  • @Mike,我将不得不递归地执行此操作,因为这些对象是动态构建的,我不是手动发送它们,它们是我框架的一部分,可以正常工作。无论如何我都会执行这个 hack,但我只是想深入了解一下,好像这​​是 jQuery 中的一个错误,那么我的 hack 将是一个不必要的代码,如果问题出在 MVC 上怎么办?我想正确地编写hack。
【解决方案2】:

jQuery 就是这样做的。您可以通过firebug fiddler、chrome dev helper等来监控请求。

在这种情况下,也许您可​​以使用空字符串代替null

data: {
    Country: 'US',
    State: ""
}

【讨论】:

    【解决方案3】:

    如果您必须发布数据而不是将对象用作 jSoN,请参阅链接

    To pass whole JSON objects into controller of MVC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2013-07-12
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多