ASP.NET MVC 接收“null”作为字符串而不是 null

Posted

技术标签:

【中文标题】ASP.NET MVC 接收“null”作为字符串而不是 null【英文标题】:ASP.NET MVC receives "null" as a string instead of 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 不应该在全部。

【问题讨论】:

阅读这篇:***.com/questions/801032/null-object-in-javascript http://en.wikipedia.org/wiki/Http#Technical_overview 如果您必须发布数据而不是作为 json。见链接***.com/questions/8442283/… 我同时使用 IE9、Chrome、Firefox,结果都一样。 【参考方案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

【讨论】:

以上是关于ASP.NET MVC 接收“null”作为字符串而不是 null的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core Web 应用程序 POST 方法始终接收 NULL 作为参数

模型在使用 C# 将 POST 方法作为参数传递给 ASP.NET MVC 中同一控制器的 GET 方法时获取 NULL

ASP.NET MVC 下UpdateModel可空未填写的参数为Null,为何不是空字符串

asp.net mvc 控制器返回 json List<T> 未知错误

将字符串作为参数传递到 _context.Database.SqlQuery ASP.NET MVC 5

如何将 ASP.NET MVC 视图呈现为字符串?