C# MVC 4: передача массива JavaScript в контроллер
в MVC 4, Как вы передаете массив JavaScript в представлении функции в контроллере с AJAX?
Это не похоже на работу:
$.ajax(
{
type: "POST",
url: "../Home/SaveTable",
data: { function_param: countryArray }
});
проблема в том, что countryArray-это глобальный массив в представлении JavaScript, и я проверил, что в нем есть элементы перед передачей. Однако, когда функция saveTable получает массив, функция говорит, что она получила массив null string [].
Я знаю только, что передача массивов из контроллер до посмотреть, вы сериализуете сложные типы данных с помощью return Json(data, JsonRequestBehavior.AllowGet);
а затем де-сериализуйте его, установив его в переменную "var".
поэтому я, вероятно, должен сделать это и для этого, но как?
Edit 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;
}
3 ответов
необходимо указать traditional: true
при сериализации массивов.
$.ajax({
type: "POST",
traditional: true,
url: "../Home/SaveTable",
data: { function_param: countryArray }
});
нашел это хорошее объяснение на что traditional: true
делает:https://stackoverflow.com/a/5497151/2419531
EDIT:
если вы не хотите использовать traditional: true
, вы можете передать данные в формате 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 в своем контроллере.