将2个对象数组从jquery发送到MVC控制器

时间:2017-10-31 11:36:41

标签: jquery json asp.net-mvc

我在Controller上有以下方法:

public ActionResult TestMultipleParameters(IEnumerable<TestM> competences, IEnumerable<long> extracompetences)
        {
            return Json("success", JsonRequestBehavior.AllowGet);
        }

对象是:

public class TestM
{
   public string uid { get; set; }
   public long Id { get; set; }
   public bool IsFromParent { get; set; }
}

从查询我试图发送:

var competences = [ {uid: "a", Id: 1, IsFromParent: true}, {uid: "b", Id: 2, IsFromParent: false}];
var extraCompetences = [1, 2, 3];
jQuery.ajaxSettings.traditional = true;
$.ajax({
   url: ...,
   async: true,
    data: JSON.stringify({ competences: competences, extracompetences: extracompetences }),
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    type: 'GET',
    error: handleException,
    success: function(data){
        console.log("success");
    }
})

我在JSON.stringify和stringify之间尝试了很多组合,但数据没有发送到MVC。如果没有JSON.stringify,则会将数组发送到控制器,但TestM的值是默认值。

1 个答案:

答案 0 :(得分:2)

你做了一个GET。 GET没有正文,您的contentType选项会被忽略。

您可以对使用[HttpPost]修饰的方法进行POST,或者您需要使用索引器生成名称/值对,但是数据将作为查询字符串发送,并且有可能您将超出查询字符串限制并抛出异常。

如果进行GET,则data必须采用格式

data: { competences[0].uid: "a", competences[0].Id: 1, ..... competences[1].uid: "b", .... },