MVC将null反序列化为“null”(字符串)

时间:2012-06-28 18:58:34

标签: asp.net-mvc

我通过$ .ajax POST将对象从jQuery传递给MVC3控制器。在使用Developer Tools进行调试时,我可以看到我分配给ajax数据属性的对象。该对象包含值为null的属性。当我调试Controller时,JS Debugger中为null的属性现在为“null”(字符串)。

这是为什么?我该怎么做才能防止这种情况发生?

C#Object

public class User
{
   public string Name { get; set; }
}

Javascript对象

var user = {
Name: null
}

控制器方法

public JsonResult HelloWorld(User user) { .. some logic .. }

ajax Call

var data = user;
$.ajax({
url: '/Controller/HelloWorld/',
data: data,
type: 'post',
success: ...
error: ...
})

1 个答案:

答案 0 :(得分:4)

Yeap,这是默认模型绑定器的不幸副作用。您可以通过在请求中根本不包含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.stringify,以便将请求转换为JSON字符串。
相关问题