$ .getJSON使用null参数调用MVC控制器操作

时间:2009-09-10 08:04:55

标签: jquery asp.net-mvc

我有一个带有以下操作代码的控制器:

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端做什么?

2 个答案:

答案 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?

我的意思是,当你不想检查密码的强度时,你真的需要传递用户名,名字吗?