Posting JSON Arrays to a MVC Controller using JQuery 1.4.1
April 27, 2010 1 Comment
Following up on my April 13th post, I have the drag and drop working between the 2 tables. I now want to post the data back to the server for processing
Posting to a server method like so:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string regionId)
{
//Do Something Useful Here
return View();
}
(I know that the return will be JSON, not an ActionResult, but one thing at a time)
I set up a simple AJAX call in JQuery like so:
$.post("Region/Index",{regionId: "Hello"});
Things worked great:
I then tried to change the parameter from a single string to an array of strings
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(List<String> regionIds)
{
//Do Something Useful Here
return View();
}
And I changed the AJAX call to this:
var regionArray = new Array();
$("#destinationTable tr:gt(0)").each(function () {
var regionId = $(this).find("#regionId").html();
regionArray.push(regionId);
});
var postData = { regionIds: regionArray };
$.post("Region/Index", postData);
When looking at Fiddler, data is crossing over the wire:
With the web form view like so:
But the MVC function was not recognizing the input – the paramters were null. After many hours of searching and trial-by-error, I found this post
Once I changed the $post to $.ajax and specified the traditional attribute, the parameters were filled fine.
Note that
jQuery.ajaxSetting.traditional = true;
does not work – traditional is not a property of ajaxSetting
This works jQuery.ajaxSettings.traditional = true;
ajaxSettings with an ‘s’ at the end