passing array from javascript to controller MVC 4

29,259

Solution 1

Client side:

$.ajax({
     type: "POST",
     url: "HomePage/HandleOperations",
     data: {operations: operationCollection},
     success: function (data) { alert("SUCCESS"); }
});

and declare a class server side like this:

public class Operation
{
  public int Index;
  public string Source;
  public string Target;
  public int AddOrDel;
}

then you can have this action:

public void HandleOperations(Operation[] operations)
{
}

Solution 2

the Ajax parameter

traditional : true

will do the trick.

Solution 3

Usage of the traditional: true parameter for an ajax call:

To help radbyx, using the "traditional: true" property of an ajax call, like the following, will tell ajax to use the traditional form of serialization. More details: http://api.jquery.com/jQuery.param/ or What is "traditional style of param serialization' in JQuery.

$.ajax({
     type: "POST",
     url: "HomePage/HandleOperations",
     data: {operations: operationCollection},
     traditional: true,
     success: function (data) { alert("SUCCESS"); }
});
Share:
29,259
laitha0
Author by

laitha0

Updated on July 18, 2022

Comments

  • laitha0
    laitha0 almost 2 years

    I am using razor and I'm having a hard time passing an array to a controller. the array contains objects that I made and I am trying to do this:

    $.ajax({
         type: "POST",
         url: "HomePage/HandleOperations",
         data: JSON.stringify(operationCollection),
         success: function (data) { alert("SUCESS");},
         dataType: "json",
         contentType: "application/json"
    });
    

    and my controller is:

     public void HandleOperations(List<string> operationCollection)
     {
    
     }
    

    I am not required to use ajax but I am not sure how else it could be done. In the controller it shows that the "operationCollection" contains elements but they are all null.

  • laitha0
    laitha0 almost 11 years
    this works! I did not know that I need a model for it. Thanks
  • Anders Lindén
    Anders Lindén almost 11 years
    Well, need and need, you will get the opportunity to put words on the items, they are after all operations :)
  • Anders Lindén
    Anders Lindén almost 11 years
    In the json version, you keep the call to JSON.Stringify, and dataType: "json" and have an action that takes a string as parameter, public void HandleOperations(string operations), then you call var operationArr = JavaScriptSerializer.Deserialize<Operation>(operations);, you need to add a reference to System.Web.Extensions to your project
  • Sakthivel
    Sakthivel over 10 years
    you actually dont need a model, using traditional:true will do it in ajax post.
  • radbyx
    radbyx over 10 years
    What do you mean? Where should I write traditional??
  • puddinman13
    puddinman13 over 10 years
    $.ajax({ type: "POST", url: "HomePage/HandleOperations", data: {operations: operationCollection}, traditional: true, success: function (data) { alert("SUCCESS"); } });