How can I post an array of string to ASP.NET MVC Controller without a form?
I modified my response to include the code for a test app I did.
Update: I have updated the jQuery to set the 'traditional' setting to true so this will work again (per @DustinDavis' answer).
First the javascript:
function test(){ var stringArray = new Array(); stringArray[0] = "item1"; stringArray[1] = "item2"; stringArray[2] = "item3"; var postData = { values: stringArray }; $.ajax({ type: "POST", url: "/Home/SaveList", data: postData, success: function(data){ alert(data.Result); }, dataType: "json", traditional: true });}
And here's the code in my controller class:
public JsonResult SaveList(List<String> values){ return Json(new { Result = String.Format("Fist item in list: '{0}'", values[0]) });}
When I call that javascript function, I get an alert saying "First item in list: 'item1'". Hope this helps!
FYI: JQuery changed the way they serialize post data.
http://forum.jquery.com/topic/nested-param-serialization
You have to set the 'Traditional' setting to true, other wise
{ Values : ["1", "2", "3"] }
will come out as
Values[]=1&Values[]=2&Values[]=3
instead of
Values=1&Values=2&Values=3
Thanks everyone for the answers. Another quick solution will be to use jQuery.param method with traditional parameter set to true to convert JSON object to string:
$.post("/your/url", $.param(yourJsonObject,true));