AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?

Posted

技术标签:

【中文标题】AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?【英文标题】:AJAX Post of JavaScript String Array to JsonResult as List<string> Always Returns 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"
 );

【问题讨论】:

【参考方案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

以上是关于AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax将javascript数组发送到代码后面(c#)

通过 jQuery AJAX 将字符串数组传递给 C# WebMethod

使用 jQuery.ajax 发布函数将 javascript 数组中的数据传递到服务器?

使用 AJAX 将 JavaScript 数组发布到 asp.net MVC 控制器

如何使用 PHP 和 Ajax 将数组传递给 Javascript?

jQuery 1.4.4+ AJAX 请求 - 发布空数组或对象变成字符串