传递给Controller的数组接收为NULL

时间:2013-07-16 14:38:28

标签: c# javascript jquery asp.net-mvc

我正在使用$.post()将一个整数值数组发布到我的控制器。

以下是我构建数组的方法:

var ratings = [];
$('#ratings input[name=newReviewRatings]').each(function () {
    ratings.push($(this).val());
});

以下是我将其发布到控制器的方式:

$.post('@Url.Action("CreateReview", "Provider")',
{
    id: providerId,
    ratings: ratings,
    comment: comment
});

以下是发布的表单数据:

  

{ID = 437baf29-4196-4966-88de-a8fde87ef68d&安培;评分%5B%5D = 1&安培;评分%5B%5D = 2及评分%5B%5D = 3及评分%5B%5D = 4和;评分%图5b%5D = 5&安培;注释=评论}

这是我的控制器签名:

public ActionResult CreateReview(Guid id, int[] ratings, string comment)
{
    // ....
}

这似乎应该是正确的,但ratings始终为空。谁能看到我错过的东西?

我也试过了string[] ratings并获得了相同的结果。我还看到了使用JSON.stringify(ratings)传递数组的建议,但这似乎也没有帮助。

2 个答案:

答案 0 :(得分:4)

除了将帖子数据转换为json之外,您还可以将traditional参数设置为true。这将导致jQuery使用正确的MVC格式。

jQuery.ajaxSettings.traditional = true;

$.post('@Url.Action("CreateReview", "Home")',
    {
        id: 'GUID STRING HERE',
        ratings: [1, 2, 3],
        comment: 'adfef'
    });

答案 1 :(得分:0)

尝试指定contentType,如下所示:

$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
})