JavaScript字符串数组的AJAX Post到JsonResult作为List<string>总是返回null?

35

我在尝试使用JavaScript构建一个字符串数组,并在操作方法中获取结果的字符串列表。以下是我的JavaScript代码。我正在使用jQuery 1.4.2。问题是我的操作方法中的List始终显示为NULL。JavaScript字符串数组是否无法正确映射到C#中的字符串列表?

var test = ['test1', 'test2'];
var parms = {
  var1: 'some string',
  var2: test
};

$.ajax({
  type: "POST",
  url: "/Test/JSONTestAction",
  async: false,
  data: parms,
  dataType: "json",
  success: function(data) {

    // success
  }
});

那么我的JsonResult看起来像下面这样:

public JsonResult JSONTestAction(string var1, List <string> var2) {
 // var2 is always NULL -- not good

 return Json(new {
  test = "test"
 });
}
2个回答

55

在更新到jquery 1.4.2后,我遇到了同样的问题。你可以在这里(Ajax部分)找到解决方案。

在ajax选项中添加traditional : true应该可以解决问题。

$.ajax({
    type: "POST",
    traditional: true,
    url: "/Test/JSONTestAction",
    async: false,
    data: parms,
    dataType: "json",
    success: function(data) {

        // success
    }
});

我一直为这个问题苦恼了好几个小时,谢谢! - Fabzter
“here”链接已损坏。 - Ryan Gates
谢谢@RyanGates,老实说我现在记不清那个链接里是什么了。我相信这个现在可能会有所帮助。 - uvita

7
这个改变是为了让PHP/Rails用户更好地使用原生行为,这里可以了解更多有关参数变化的信息。您可以像这样每个请求都启用它:
$.ajax({ 
 //Stuff...
 traditional:true 
});

或者像这样全局设置(只需要在发出任何请求之前运行一次):

jQuery.ajaxSettings.traditional = true;

只是提供信息,实际上是这样的:jQuery.ajaxSettings.traditional = true; - aherrick
1
没错 :) 挺有趣的,因为我最近在一个项目中需要全局执行这个操作,所以回到这篇帖子作为参考。 - aherrick
@aherrick 这总是发生的 :D - SRIDHARAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接