我有一个带有以下操作代码的控制器:
public JsonResult CheckPasswordStrength(string password, string username, string firstname, string lastname)
{
...
return this.Json(jsonResponse);
}
然后在我的页面上的javascript中调用
$.getJSON('http://localhost/site/controller/CheckPasswordStrength', { password: 'test', username: null, firstname: null, lastname: null }, function(data) {
...
});
问题是我的javascript调用中的null(firstname,lastname,username)参数,它们在调用的控制器操作中不为null。它们具有字符串“null”值。我已经尝试过在我的javascript中使用未定义的参数值,但它没有帮助。
如果我在javascript调用中仅指定非空(不带空参数)的参数,则我的操作中的参数将被正确传输。
如何在我的$ getJSON调用中传递 null参数,这些调用将被正确地转换为控制器操作,或者我应该在MVC端做什么?
答案 0 :(得分:7)
我假设您从某些表单字段的值构建此对象文字。为什么不发布空字符串呢?如果你真的想把值留空,不要传递它们,在发送之前从数据中去掉空值:
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) {
//...
});
虽然我建议不要深入到其他人的框架和覆盖的东西 - 你可以使$.param
函数(这是jQuery用来将你的对象变成查询字符串)自动调用stripNull
(function($) {
// function stripNull() { ... }
var oldParam = $.param;
$.param = function(obj) { return oldParam.call(this, stripNull(obj)); }
})(jQuery);
如果您希望传递空字符串或其他一些“空标识符”(比如说\01
),您仍然可以使用stripNull()但更改delete obj[i];
--- {{1 }}
答案 1 :(得分:0)
如果没有用户名参数,你不能只调用$ .getJSON吗?如果它是null?
我的意思是,当你不想检查密码的强度时,你真的需要传递用户名,名字吗?