Pet*_*bek 3 asp.net-mvc jquery
我有一个控制器,其中包含以下操作代码:
public JsonResult CheckPasswordStrength(string password, string username, string firstname, string lastname)
{
...
return this.Json(jsonResponse);
}
Run Code Online (Sandbox Code Playgroud)
然后在我的javascript页面上我打电话
$.getJSON('http://localhost/site/controller/CheckPasswordStrength', { password: 'test', username: null, firstname: null, lastname: null }, function(data) {
...
});
Run Code Online (Sandbox Code Playgroud)
该问题是,这是空的(名字,姓氏,用户名)在我的javascript调用的参数,它们不是被调用的控制器操作无效.它们具有字符串"null"值.我已经尝试过在我的javascript中使用未定义的参数值,但它没有帮助.
如果我在javascript调用中仅指定非null(不带空参数)的参数,则我的操作中的参数将被正确传输.
我应该如何在$ getJSON调用中传递null参数,这些参数将被正确地转换为控制器操作,或者我应该在MVC端做什么?
我假设您从某些表单字段的值构建此对象文字.为什么不发布空字符串呢?如果你真的想把值留空,不要传递它们,在发送之前从数据中去掉空值:
function stripNull(obj) {
for (var i in obj) {
if (obj[i] === null) delete obj[i];
}
return obj;
}
$.getJSON('http://localhost/site/controller/CheckPasswordStrength',
stripNull({ password: 'test', username: null, firstname: null, lastname: null }),
function(data) {
//...
});
Run Code Online (Sandbox Code Playgroud)
虽然我建议不要进入其他人的框架和覆盖的东西 - 你可以创建$.param函数(这是jQuery用来将你的对象变成查询字符串)调用stripNull自动
(function($) {
// function stripNull() { ... }
var oldParam = $.param;
$.param = function(obj) { return oldParam.call(this, stripNull(obj)); }
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
如果你想传递一个空字符串,或者其他一些"空标识符"(\01例如),你仍然可以使用stripNull()但是改变delete obj[i];---obj[i] = '';