我不确定为什么会这样。我有一个字符串数组应该发送到期望字符串数组的控制器操作。这是我的jQuery:
$.post("/@Model.Controller/@Model.Action", { "choices": ajax }, function (result) {
$("#label" + "@Model.Id").html(result);
});
这是我的控制器动作:
public JsonResult UpdateMultipleType(string[] choices)
{
return Json(choices);
}
我看了一下Firebug,在Post标签中,标题是:
Parametersapplication/x-www-form-urlencoded
choices[] Comedy
choices[] Thriller
choices[] Action
choices[] Adventure
我已经调试并确认它正在命中UpdateMultipleType,并且在调用该操作时字符串数组“choices”为null。调用通过,但由于我们返回null,因此在调用完成后出现Javascript错误。
我不知道为什么我的控制器操作被发送为null,因为很明显有一个叫做选择的数组被发送过来。
答案 0 :(得分:12)
你需要告诉jQuery使用传统的构建ajax数据的方式。
将此文件准备好:
jQuery.ajaxSettings.traditional = true;
答案 1 :(得分:3)
Javascript:
var data = ["a", "b", "c", "d"]; //sample
//Wrap your data ...
var postData = { choices: data };
$.ajax({
type: "POST",
url: "/Test/Index", //Your URL here
data: postData,
success: function (result) {
//your code here
},
dataType: "json",
traditional: true
});
你的控制器:
public JsonResult UpdateMultipleType(List<String> choices) [...]
答案 2 :(得分:-2)
您需要使用[HttpGet]修饰Action with属性并将Json的第二个参数传递为Allowget
[HttpGet]
public JsonResult UpdateMultipleType(string[] choices)
{
return Json(choices, JsonRequestBehavior.AllowGet);
}
如果选择数组,您可以将“选择”更改为“选择[]”