C#MVC 4:将View中的JavaScript数组传递给Controller

在MVC 4中,如何将View中的JavaScript数组传递给使用AJAX的Controller中的函数?

这似乎不起作用:

$.ajax( { type: "POST", url: "../Home/SaveTable", data: { function_param: countryArray } }); 

问题是,countryArray是JavaScript视图中的全局数组,我在传递之前检查它是否包含元素。 但是,当saveTable函数接收到数组时,该函数表示它收到一个空字符串[]数组。

我只知道将数组从Controller传递给View ,你用return Json(data, JsonRequestBehavior.AllowGet);序列化复杂数据类型return Json(data, JsonRequestBehavior.AllowGet); 然后通过将其设置为“var”变量来反序列化它。

所以我可能也必须这样做,但如何?

编辑1:

这是SaveTable函数的缩短版本:

 public string SaveTable(string[] function_param) { if (function_param != null && function_param > 0) { //some code return "Success"; } //The following code will run if it's not successful. return "There must be at least one country in the Region."; //Yeah it's always returning this b/c function_param is null; } 

在序列化数组时,您需要设置traditional: true

 $.ajax({ type: "POST", traditional: true, url: "../Home/SaveTable", data: { function_param: countryArray } }); 

找到了关于traditional: true解释: https : //stackoverflow.com/a/5497151/2419531

编辑:

如果您不想使用traditional: true ,则可以使用JSON.stringify将数据作为字符串JSON.stringify并指定contentType

 $.ajax({ type: "POST", url: "../Home/SaveTable", contentType: 'application/json', data: JSON.stringify({function_param: countryArray}), }); 

你应该在你的控制器上使用:

 public string SaveTable(object[] function_param) { //some code } 

应该做的工作,它是为未来的用户。

你的Ajax:

 $.ajax({ type: "POST", url: "../Home/SaveTable", contentType: 'application/json', data: {function_param: JSON.stringify(countryArray)}, }); 

在你的控制器中:

 using Newtonsoft.Json; public string SaveTable(string function_param) { dynamic func_param = JsonConvert.DeserializeObject(function_param) } 

那么你将能够在你的控制器中做一个foreach。