代码之家  ›  专栏  ›  技术社区  ›  Peter Starbek

对MVC控制器操作使用空参数的$.getjson调用

  •  3
  • Peter Starbek  · 技术社区  · 15 年前

    我有一个控制器,其操作代码如下:

    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调用中,参数为空(firstname、lastname、username),在被调用的控制器操作中不是空的。它们有字符串“空”值。我已经尝试在我的javascript中使用未定义的参数值,但它没有帮助。

    如果在我的javascript调用中只指定不为空(没有空参数)的参数,那么将正确传输我操作中的参数。

    我该怎么通过 零参数 在我的$getjson调用中,它将正确地转换为控制器操作,或者我应该在MVC端做什么?

    2 回复  |  直到 15 年前
        1
  •  7
  •   gnarf    15 年前

    我假设您从一些表单字段的值构建这个对象文本。为什么不发布空字符串呢?如果您真的想让值为空,根本不传递它们,请在发送之前从数据中除去空值:

    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]; --- obj[i] = '';

        2
  •  0
  •   vvo    15 年前

    如果它为空,您就不能在没有用户名参数的情况下调用$.getjson吗?

    我是说,你真的需要通过用户名,名字…当你不检查密码的强度时?