【问题标题】:passing List and String data from ajax to controller in mvc 4, getting NULL for list?将列表和字符串数据从ajax传递到mvc 4中的控制器,列表为NULL?
【发布时间】:2014-08-04 12:59:38
【问题描述】:

您好,我是 JavaScript 和 MVC 的新手,我正在尝试将 List 和字符串传递给我的控制器。

JavaScript 看起来像:

 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");
                  }

              });
          });

控制器看起来像:

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

有人可以帮帮我吗?

点类:

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; }
}

【问题讨论】:

  • 你的 JS 代码中的 globalList 是从哪里得到的??
  • globalList 是来自 mapbox 的坐标列表,它们是正确的我检查它 {"globalList": [{"GeoDuzina":51.506760996586294,"GeoSirina":-0.06106463202740998},{"GeoDuzina":51.516269286402846 "GeoSirina":-0.056258113472722464},{"GeoDuzina":51.50419662363912,"GeoSirina":-0.044413478462956846}]}
  • 显示Point
  • 您刚刚在 cmets 中发布了什么对象?如果这应该是您的 javascript 代码中的 globalList 变量,那么您的嵌套太多了,它看起来像这样:{globalList: { globalList: [..content..] } }
  • @user3906678....只需将 float 更改为属性的 double 数据类型...

标签: c# javascript ajax asp.net-mvc


【解决方案1】:

它不会工作。如果你稍微调试一下,你会看到你发布到服务器是这样的:

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

它只是字符串数组。但是有一种方法可以做你想做的事。 您可以将数组序列化为 json,然后在控制器中对其进行反序列化。只需将您的参数更改为:

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

和行动:

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

或者你可以让 param 对象看起来像 HTML 表单:

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
 };

它适用于您的操作。

还有很多其他方法可以做到这一点。我只展示其中两个。对你有好处吗?

顺便说一句。这个数字对于浮点数来说太长了。;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多