简体   繁体   中英

passing List and String data from ajax to controller in mvc 4, getting NULL for list?

Hi I'm new to JavaScript and MVC, and I'm trying to pass List and string to my controller.

JavaScript looks like:

 var parms = {
                  globalList: globalList,
                  fieldName: fieldName
              };
              $.ajax({
                  //contentType: 'application/json; charset=utf-8',
                  type: "POST",
                  traditional: true,
                  url: "/Home/SaveField",
                  async: false,
                  data: parms,
                  dataType: "json",
                  success: function (data) {
                      console.log("uspjeh");
                  },
                  error: function (errorData) {
                      console.log("errors");
                  }

              });
          });

and controller looks like:

public void SaveField(List<Point> globalList, String fieldName)
{
  // filedName is correctly passed
  // list is null
}

can somebody help me please?

Point class:

public class Point
{
  [Key]
  public int PointId { get; set; }
  public float GeoDuzina { get; set; }
  public float GeoSirina { get; set; }
  [ForeignKey("Data")]
  public int DataId { get; set; }
  public virtual Data Data { get; set; }
}

It wont work. If you debug a little then you will see that you post to server something like this:

globalList:[object Object]
globalList:[object Object]
globalList:[object Object]

It is just array of strings. But there is a way to do what you want. You can serialize your array to json and then deserialize it in your controller. Just change your param to:

var parms = {
    globalList: JSON.stringify(globalList),
    fieldName: fieldName
};

And action:

[HttpPost]
public void SaveField(string globalList, string fieldName)
{
    var serializer = new JavaScriptSerializer(); //use any serializer you want
    var list = serializer.Deserialize<List<Point>>(globalList);
}

Or you can make param object looks like from HTML form:

var parms = {
     "globalList[0].GeoDuzina": 51.506760996586294, 
     "globalList[0].GeoSirina": -0.06106463202740998,
     "globalList[1].GeoDuzina": 51.516269286402846, 
     "globalList[1].GeoSirina": -0.056258113472722464,
     "globalList[2].GeoDuzina": 51.50419662363912, 
     "globalList[2].GeoSirina": -0.044413478462956846,
     fieldName: fieldName
 };

It works with your action.

There are many other ways to do that. I just show two of them. Is any good for you?

btw. This numbers are too long for floats.;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM