Как я могу отправить нулевое значение? - PullRequest
5 голосов
/ 21 мая 2010

Я хочу сделать что-то подобное

$.get('/Controller/Action/', { model : null }, function(data) {});

К сожалению, это не работает. На стороне сервера значение модели составляет {object}.

Как мне получить null?

EDIT

--- Javascript ---

var json = JSON.stringify({ model: null });
$.get('/Controller/Action/', json, function (data) { }); 

--- Контроллер ---

[HttpGet]
public ActionResult Test(object model) 
{ 
// here i need model = null but keep returning {object}
return PartialView("TestPartial"); 
} 

Ответы [ 2 ]

2 голосов
/ 21 мая 2010

Я изо всех сил пытаюсь понять, что именно вы спрашиваете, поэтому я попытаюсь попробовать это. :)

Если вы просто не хотите отправлять значение, просто установите для данных значение null

$.get('/Controller/Action/', null, function(data) {});

Если вы хотите иметь один параметр действия null, просто исключите его из массива данных.

Например, для этого действия:

[HttpGet]
public JsonResult Foo(string bar, string foo)
{
    /*The Magic*/
}

Возможно, вы захотите отправить значение только для bar, а не foo, тогда jquery будет:

$.get('/Controller/Foo/', { bar: 'It's a bingo! }, function(data) {});

В результате bar будет передано, а foo будет нулевым.

Еще одна вещь, которую стоит отметить, чтобы избежать перехвата JSON, ASP.NET MVC 2 предназначен для передачи JSON из запроса POST, а не GET.

Причину можно найти здесь: http://haacked.com/archive/2009/06/25/json-hijacking.aspx

Чтобы внести это изменение, украсьте свое действие атрибутом [HttpPost] и измените свой jQuery на:

$.post('/Controller/Foo/', { bar: 'It's a bingo! }, function(data) {});

Надеюсь, это поможет.

EDIT Я просто подумал / открыл что-то. Вместо передачи { model: null } попробуйте передать { model: undefined }. У меня просто была похожая проблема, когда я хотел ничего не передавать обратно строковому параметру, а 'null' дал строку "null", где undefined дал null.

1 голос
/ 21 мая 2010
$.get('/Controller/Action/', '{ "model" : null }', function(data) {});

Как уже говорили другие, вы не можете позволить jQuery выполнять сериализацию в этом случае.

Вам нужно будет сделать это вручную или с помощью json2.js , что всегда является моей рекомендацией.Я НИКОГДА не полагаюсь на jQuery или нативные реализации, так как слишком много несоответствий и ошибок.

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