jQuery Ajax帖子向我的MVC控制器发送null

时间:2011-07-18 18:16:46

标签: jquery asp.net-mvc-3

我不确定为什么会这样。我有一个字符串数组应该发送到期望字符串数组的控制器操作。这是我的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,因为很明显有一个叫做选择的数组被发送过来。

3 个答案:

答案 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) [...]

See it.

答案 2 :(得分:-2)

您需要使用[HttpGet]修饰Action with属性并将Json的第二个参数传递为Allowget

[HttpGet]
public JsonResult UpdateMultipleType(string[] choices)
{
   return Json(choices, JsonRequestBehavior.AllowGet);
}

如果选择数组,您可以将“选择”更改为“选择[]”