[英]C# MVC 4: Passing JavaScript array in View to 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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.