Вызов $ .getJSON с нулевыми параметрами для действия контроллера MVC - PullRequest
3 голосов
/ 10 сентября 2009

У меня есть контроллер со следующим кодом действия:

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, не являются нулевыми в вызываемом действии контроллера. У них есть строковое значение «ноль». Я уже пытался с неопределенными значениями параметров в моем JavaScript, но это не помогает.

Если я указываю только параметры, которые не являются нулевыми (без нулевых параметров) в моем вызове javascript, параметры в моем действии передаются правильно.

Как мне передать нулевые параметры в моем вызове $ getJSON, который будет правильно передан в действие контроллера или что мне делать на стороне MVC?

Ответы [ 2 ]

7 голосов
/ 10 сентября 2009

Я предполагаю, что вы строите этот литерал объекта из значений некоторых полей формы. Почему бы не опубликовать пустые строки вместо этого? Если вы действительно хотите оставить значения пустыми, не передавайте их вообще, удалите пустые значения из данных перед отправкой:

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

0 голосов
/ 10 сентября 2009

вы не можете просто вызвать $ .getJSON без параметра имени пользователя, если он пуст?

Я имею в виду, вам действительно нужно передавать имя пользователя, имя ... когда вы не хотите проверять надежность пароля?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...