2013-03-26 5 views
2

Все, что я пытаюсь сделать, это передать массив строк/ints в метод действия mvc. Но данные всегда возвращаются как нулевые, что я делаю неправильно?Данные JQuery Post для MVC Action Method?

MVC контроллер

[HttpPost] 
public ActionResult MyAction(List<string> ids) 
{ 
    // do something with array 
    // But it's null 
     return View(); 
} 

JQuery

$.post("/MyController/MyAction", JSON.stringify(ids), function() { alert("woohoo"); }, "application/json"); 

Данные, размещены в результате действия

["156"] 

ответ

3

Try:

... JSON.stringify({ ids : ids }), ... 

Я уверен, что связующее устройство модели не уверен, что должен быть связан с списком/массивом.

Рассмотрим:

[HttpPost] 
public ActionResult MyAction(List<string> ids, List<string> blah) 
{ 
} 

Если JSON передается только как массив значений, какой параметр действительно вяжет? JSON может быть намного сложнее, чем представление FORMS, поэтому ему также нужно немного больше определения.

Например, для предыдущего рассмотрения будет выполнено следующее.

{ 
    ids : ["asdf","asdf"], 
    blah : ["qwer", "qwer"] 
} 

Update

Для того, чтобы отправить JSon правильно следующий АЯКС вызов должен был бы быть:

$.ajax({ 
    type: "POST", 
    url: "/Home/Index", 
    data: JSON.stringify(ids), 
    contentType: "application/json; charset=utf-8" 
}); 

Последний параметр в сообщение (вы указали application/json) является то, что в ожидайте от сервера. По умолчанию a $ .Post будет создавать ContentCode формы Encoded (application/x-www-form-urlencoded), который, как представляется, жестко закодирован в методе быстрого доступа. Чтобы установить ContentType, вам нужно использовать длинную версию $ .ajax.

+0

Я уже пробовал это, все еще возвращаюсь как null {"ids": ["156"]} – aryaxt

+0

Извините, вы также должны указать тип контента. Обновление ответа. –

+0

У меня уже в моем коде я начал параллель (VM), и теперь все работает. Too ba dI не может удалить вопрос. – aryaxt

Смежные вопросы