Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jquery向.net mvc 3控制器发布包含Int列表的对象_Javascript_Asp.net Mvc 3 - Fatal编程技术网

Javascript 从jquery向.net mvc 3控制器发布包含Int列表的对象

Javascript 从jquery向.net mvc 3控制器发布包含Int列表的对象,javascript,asp.net-mvc-3,Javascript,Asp.net Mvc 3,我很难通过jQuery将JavaScript对象发布到.NETMVC3控制器 我的目标: var postData={ “thing1”:“随便什么”, “thing2”:“其他东西”, ‘thing3’:[1,2,3,4] } 我的jQuery调用: $.post(“”、postData、函数(数据){ //东西 }); 我的视图模型: 公共类提交{ 公共字符串thing1{get;set;} 公共字符串thing2{get;set;} 公共IEnumerable thing3{get;s

我很难通过jQuery将JavaScript对象发布到.NETMVC3控制器

我的目标:

var postData={
“thing1”:“随便什么”,
“thing2”:“其他东西”,
‘thing3’:[1,2,3,4]
}
我的jQuery调用:

$.post(“”、postData、函数(数据){
//东西
});
我的视图模型:

公共类提交{
公共字符串thing1{get;set;}
公共字符串thing2{get;set;}
公共IEnumerable thing3{get;set;}
}
我的控制器:

[AcceptVerbs(HttpVerbs.Post)]
公共操作结果提交(提交更改)
{
返回新的EmptyResult();
}
问题是,我的控制器中的“changes”对象的thing1等于“whatever”,thing2等于“something other”,但thing3为空。现在我可以把3作为我的整数列表了吗

添加:我认为这更多的是映射问题,而不是序列化问题。在我的控制器中,如果我看

HttpContext.Request.Form["thing3[]"]
我得到一个值为“1,2,3,4”的字符串。不过,我还是希望映射能够正常工作


谢谢

嗨,为什么不在传递值之前加入它们呢

var thing3 = [1, 2, 3, 4];

thing3 = thing3.join(',');

var postData = {
    'thing1' : "whatever",
    'thing2' : "something else",
    'thing3' : thing3 
}

否则,我认为您必须使用该函数将数组序列化

我在web表单项目中执行类似的操作,但我使用的是
列表
而不是
IEnumberable
(编辑添加:)并且它正在工作…;)

编辑2:

进一步看看我们在做什么不同。您是否可以尝试以稍微不同的方式构建对象,并使用
JSON.stringify()
?下面是一个有点接近什么工作对我来说

var postData = JSON.stringify({
    thing1 : "whatever",
    thing2 : "something else",
    thing3 : [1, 2, 3, 4]
});
只需将其发布为json:

    $.ajax({
        url: '<%= Url.Action("Commit", "MassEdit") %>',
        type: 'POST',
        dataType: 'json',
        data: JSON.stringify({'thing1' : "whatever",
    'thing2' : "something else",
    'thing3' : [1, 2, 3, 4]
}),
        contentType: 'application/json; charset=utf-8',
        success: function (data) {

        }
    });
$.ajax({
url:“”,
键入:“POST”,
数据类型:“json”,
数据:JSON.stringify({'thing1':“随便什么”,
“thing2”:“其他东西”,
‘thing3’:[1,2,3,4]
}),
contentType:'application/json;charset=utf-8',
成功:功能(数据){
}
});

而且它应该能工作

有点麻烦,不是吗?然后他必须在另一端处理数据,而不是得到MVC提供给他的漂亮的映射材料。@T.J.Crowder是的,这是一种黑客行为,我对MVC3一无所知,但是要序列化数组,你必须发送带有参数集的请求,我认为在使用shortand$时不会设置参数(传统),这是我的备份计划,但如果MVC能帮我做就好了。(它应该是这样的)我在将它发送到服务器时没有序列化问题。如果我查看HttpContext.Request.Form[“thing3[]”,我会得到“1,2,3,4”。不过,我还是希望映射能够正常工作。@Erik W很抱歉,我不明白这一点!:)我不能让它工作。我尝试了IEnumerable、IList和偶数int[]的方法,但什么都没有。@T.J.List实现了IList吗?还是我遗漏了什么?无论如何,这也不行。@Erik:对不起,我想的是
LinkedList
,而不是
List
。@Erik:哪一个不行?
列表
单独显示,或者您是否按照我在编辑中的建议更改了对象。。。我看到你接受了另一个答案,它对对象做了类似的更改,但我很好奇你是否把它放在了IEnumerable上。最终的问题是jquery$.post像表单一样发布单个属性(因此它发送了四个“thing3[]”),而解决方案只发布了一个json字符串,而.net mvc 3显然更了解这个字符串。mvc东西是设计用来在请求中接收json的吗?而且,正如所写的那样,这篇文章不会起作用。如果给它一个对象作为
数据
,jQuery总是对其进行URL编码,而不管您指定的
内容类型
。如果使用自定义的
contentType
,则必须自己序列化它(例如,
JSON.stringify
或类似内容),并将
数据
指定为字符串。您在请求中提供了
数据类型:“json”
,但它控制您期望返回的类型,而不是您发送的类型(尽管与
数据的命名相似性非常混乱)。是的,您是对的,您必须将其字符串化,asp.net mvc 3可以直接接收json,数据类型json指定您希望从服务器返回的类型,您可以将其更改为您将返回的任何内容,contenttype指定您将向服务器发送的内容。我编辑了这篇文章。很好的交易,如果MVC3能收到它,那就太酷了。我将从示例中删除
数据类型
,以避免混淆人们。