我该如何发送空值?

时间:2010-05-21 02:41:23

标签: c# jquery json asp.net-mvc-2

我想做这样的事情

$.get('/Controller/Action/', { model : null }, function(data) {});

不幸的是,它不起作用。在服务器端,模型的值为{object}

如何获得null

修改

--- Javascript ---

var json = JSON.stringify({ model: null });
$.get('/Controller/Action/', json, function (data) { }); 

---控制器---

[HttpGet]
public ActionResult Test(object model) 
{ 
// here i need model = null but keep returning {object}
return PartialView("TestPartial"); 
} 

2 个答案:

答案 0 :(得分:2)

我很难理解你的要求,所以我会尝试尝试。 :)

如果您只想发送没有值,那么只需将数据设置为空

$.get('/Controller/Action/', null, function(data) {});

如果您希望将操作的一个参数设置为null,则只需将其从数据数组中排除。

例如,对于此操作:

[HttpGet]
public JsonResult Foo(string bar, string foo)
{
    /*The Magic*/
}

你可能只想发送bar而不是foo的值,那么jquery就是:

$.get('/Controller/Foo/', { bar: 'It's a bingo! }, function(data) {});

这将导致bar成为传递的值,foo为空。

另外需要注意的是,为避免JSON劫持,ASP.NET MVC 2旨在让JSON从POST请求而不是GET传递。

原因可以在这里找到:http://haacked.com/archive/2009/06/25/json-hijacking.aspx

要进行此更改,请使用[HttpPost]属性修饰您的Action并将您的jQuery更改为:

$.post('/Controller/Foo/', { bar: 'It's a bingo! }, function(data) {});

我希望这会有所帮助。

修改 我只是想/发现了什么。而不是传递{ model: null }尝试传递{ model: undefined }。我只是有一个类似的问题,我想不传回任何字符串参数,'null'给出一个"null"字符串,其中{{1} 1}}给了undefined

答案 1 :(得分:1)

$.get('/Controller/Action/', '{ "model" : null }', function(data) {});

正如其他人所说,在这种情况下你不能让jQuery进行序列化。

您需要手动或json2.js执行此操作,这始终是我的建议。我从不依赖于jQuery或本机实现,因为存在太多的不一致和错误。