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> 未知错误