4

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

为什么是这样?我能做些什么来防止这种情况发生?

C# 对象

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

Javascript 对象

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: ...
})
4

1 回答 1

4

是的,这是默认模型绑定器的一个不幸的副作用。您可以通过在请求中完全不包含 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围绕 data 参数,以便将请求转换为 JSON 字符串。
于 2012-06-28T19:52:25.763 回答