我在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的值是默认值。
答案 0 :(得分:2)
你做了一个GET。 GET没有正文,您的contentType
选项会被忽略。
您可以对使用[HttpPost]
修饰的方法进行POST,或者您需要使用索引器生成名称/值对,但是数据将作为查询字符串发送,并且有可能您将超出查询字符串限制并抛出异常。
如果进行GET,则data
必须采用格式
data: { competences[0].uid: "a", competences[0].Id: 1, ..... competences[1].uid: "b", .... },