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'
。我认为您可以轻松地传递'
或不传递任何参数。空表单字段默认为'
。。。