Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# MVC 4: Passing JavaScript array in View to Controller

In MVC 4, how do you pass a JavaScript array in the View to a function in the Controller with AJAX?

This doesn't seem the work:

$.ajax(
        {
            type: "POST",
            url: "../Home/SaveTable",
            data: { function_param: countryArray }
        });

Problem is, countryArray is a global array in the JavaScript View and I've check that it has elements in it before being passed. However, when the saveTable function receives the array, the function says it received a null string[] array.

I only know that passing arrays from the Controller to the View, you serialize complex data types with return Json(data, JsonRequestBehavior.AllowGet); and then de-serialize it by setting it to a "var" variable.

So I probably have to do it for this as well, but how to?

Edit 1:

Here is the shortened version of the SaveTable function:

public string SaveTable(string[] function_param)
{
    if (function_param != null && function_param > 0)
    {
       //some code                
       return "Success";
    }

    //The following code will run if it's not successful. 
    return "There must be at least one country in the Region.";
    //Yeah it's always returning this b/c function_param is null;         
 }
like image 566
RedAces Avatar asked Jan 22 '14 16:01

RedAces


1 Answers

You need to set traditional: true when serializing arrays.

$.ajax({
    type: "POST",
    traditional: true,
    url: "../Home/SaveTable",
    data: { function_param: countryArray }
});

Found this good explanation on what traditional: true does: https://stackoverflow.com/a/5497151/2419531

EDIT:

If you don't want to use traditional: true, you can pass the data as string using JSON.stringify and specifying the contentType:

$.ajax({
    type: "POST",
    url: "../Home/SaveTable",
    contentType: 'application/json',
    data: JSON.stringify({function_param: countryArray}),
});
like image 166
Saravana Avatar answered Oct 12 '22 13:10

Saravana