Asp.net mvc MVC将null反序列化为;空";(字符串)
我通过$.ajax POST将对象从jQuery传递到MVC3控制器。在使用开发工具进行调试时,我可以看到分配给ajax数据属性的对象。对象包含值为null的属性。调试控制器时,JS调试器中为null的属性现在为“null”(字符串) 为什么会这样?我能做些什么来防止这种情况发生 C#对象 Javascript对象Asp.net mvc MVC将null反序列化为;空";(字符串),asp.net-mvc,Asp.net Mvc,我通过$.ajax POST将对象从jQuery传递到MVC3控制器。在使用开发工具进行调试时,我可以看到分配给ajax数据属性的对象。对象包含值为null的属性。调试控制器时,JS调试器中为null的属性现在为“null”(字符串) 为什么会这样?我能做些什么来防止这种情况发生 C#对象 Javascript对象 var user = { Name: null } 控制器方法 public JsonResult HelloWorld(User user) { .. some logic ..
var user = {
Name: null
}
控制器方法
public JsonResult HelloWorld(User user) { .. some logic .. }
ajax调用
var data = user;
$.ajax({
url: '/Controller/HelloWorld/',
data: data,
type: 'post',
success: ...
error: ...
})
是的,这是默认模型绑定器的一个不幸的副作用。您可以通过根本不在请求中包含null属性或使用JSON请求来避免它:
$.ajax({
url: '@Url.Action("HelloWorld", "Controller")',
data: JSON.stringify({ Name: null }),
contentType: 'application/json',
type: 'post',
success: function (result) {
// ...
}
});
注意事项:
contentType:'application/json'
围绕数据参数,以便将请求转换为JSON字符串JSON.stringify
contentType:'application/json;字符集=utf-8'
?(不是100%确定它在本例中是否有用tho)因此,在本例中,contentType
毕竟有点帮助是的,因为现在是JSON值提供程序工厂,使用JavaScriptDeserializer类来处理解析,而不是默认的模型绑定器。是的,我建议过,但OP从未回复。至于null
-“null”问题,我在另一个问题中推荐了这种方法,但JSON.stringify
无疑是一种方法,因此您不必检查每个属性+1.
$.ajax({
url: '@Url.Action("HelloWorld", "Controller")',
data: JSON.stringify({ Name: null }),
contentType: 'application/json',
type: 'post',
success: function (result) {
// ...
}
});