Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $.getJSON调用MVC控制器操作的空参数_Jquery_Asp.net Mvc - Fatal编程技术网

Jquery $.getJSON调用MVC控制器操作的空参数

Jquery $.getJSON调用MVC控制器操作的空参数,jquery,asp.net-mvc,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/CheckPasswo

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

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调用中只指定不为null的参数(没有null参数),则操作中的参数将正确传输


我应该如何在$getJSON调用中传递将被正确转换为控制器操作的null参数,或者我应该在MVC端做什么?

如果$getJSON为null,您不能在没有用户名参数的情况下调用$getJSON吗


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

我假设您是通过一些表单字段的值来构建这个对象文本的。为什么不发布空字符串呢?如果确实要保留值为空,则根本不传递它们,请在发送之前从数据中去掉空值:

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(),但可以更改
删除obj[i]--
obj[i]=''

当您将参数设置为未定义的值时,它们是否也会被绑定为“未定义”字符串?是的,它们也有“未定义”的值作为字符串。它使代码更简单,可以将所有值包含在JSON对象中,因为否则他应该检查每个值和单个值,并在中添加非空值。我想他是在问如何正确地将空值传递给服务器,而不是如何省略它们。:)这与@Vincent建议的答案基本相同,但包含代码。。。我真的不认为这是问题的解决方案。所有参数都将在URL中转换为字符串。没有办法解决这个问题,因此您必须a)省略参数,b)将其设置为在控制器中检测到的某个特定值,即“null”或甚至
\01
问题是如何正确地将null值传递给服务器,以便它们绑定到实际null而不是“null” strings@gnarf当前位置我确信这是可能的。也许它需要创建一个自定义ModelBinder,但我想这应该是可能的。当jQuery组装数据时,它使用一个名为
$的助手函数。param
-该函数将
null
编码为字符串
'null'
。我认为您可以轻松地传递
'
或不传递任何参数。空表单字段默认为
'
。。。