【问题标题】:AJAX Post of JavaScript String Array to JsonResult as List<string> Always Returns Null?AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?
【发布时间】:2011-01-31 17:27:30
【问题描述】:

我正在尝试在 JavaScript 中构建一个字符串数组,并在 action 方法的字符串列表中获取结果。下面是我的 JavaScript 的样子。我正在使用 jQuery 1.4.2。问题是我在 action 方法中的 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"
 });
}

【问题讨论】:

    标签: jquery asp.net-mvc ajax arrays json


    【解决方案1】:

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

    在 ajax 选项中添加传统 : true 应该可以工作。

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

    【讨论】:

    • 该死,我一直在为这个问题挠头一个小时。谢谢!
    • here 链接已损坏。
    • 谢谢@RyanGates,老实说,我现在不记得那个链接里有什么了。我相信this 现在可能会有所帮助。
    【解决方案2】:

    此更改旨在为 PHP/Rails 用户提供更好的原生行为,you can read about the params changes more here

    您可以像这样按请求启用它:

    $.ajax({ 
     //Stuff...
     traditional:true 
    });
    

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

    jQuery.ajaxSettings.traditional = true;
    

    【讨论】:

    • 仅供参考:jQuery.ajaxSettings.traditional = true;
    • 正确 :) 很有趣,因为我实际上回到这篇文章是作为关于如何在最近的项目中全局执行此操作的参考。
    • @aherrick 它总是会发生:D
    猜你喜欢
    • 2018-07-17
    • 2015-10-07
    • 1970-01-01
    • 2014-05-17
    • 2019-08-11
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多