我想做这样的事情
$.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");
}
答案 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或本机实现,因为存在太多的不一致和错误。