Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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
Jquery 将js对象层次结构传递给控制器_Jquery_Asp.net Mvc 3 - Fatal编程技术网

Jquery 将js对象层次结构传递给控制器

Jquery 将js对象层次结构传递给控制器,jquery,asp.net-mvc-3,Jquery,Asp.net Mvc 3,我有一个模型 public class Foo{ public int Id{get;set;} public string Name {get; set;} public DateTime Date {get; set;} public bool IsActive {get;set;} public List<Item> Items {get;set;} } public class Item{ public i

我有一个模型

  public class Foo{
     public int Id{get;set;}
     public string Name {get; set;}
     public DateTime Date {get; set;}
     public bool IsActive {get;set;}
     public List<Item> Items {get;set;}
  }

 public class Item{
    public int Id {get;set;}
    public string Name {get; set;}
    public Foo Foo {get;set;}
 }
操作方法签名如下所示:

 [HttpPost]
 public JsonResult SaveFoo(Foo foo) {
      // Now. here it passes correct Id, Name, Date and bool parameter
      // And even passes the correct number of Foo.Items
      // The only thing that bothers me -
      // all the properties of every Item is either null or zero!
 }
为什么会这样?我做错了什么?如何将对象数组传递给操作?我尝试过使用
jquery.serialize()
serializeArray()
甚至
$.toDictionary()
描述的方法


这没有帮助

您尝试过JSON请求吗?它可以更好地处理复杂的属性和集合:

var items = new Array();
$('#itemsSelector').each(function () {
    items.push({ id: $(this).val(), name: $(this).text() });
}

var id = $('#id').val();
var title = $('#title').val();
var date = $('#dateTimePicker').val();
var isActive = $('#isActive').val();

$.ajax({
    url: 'SaveFoo',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        id: id, 
        name: title, 
        date: date, 
        isActive: isActive, 
        items: items 
    }),
    success: function(result) {

    }
});

如果您需要支持较旧的浏览器,您可能需要包含脚本,以便
JSON.stringify
函数能够工作。

您尝试过JSON请求吗?它可以更好地处理复杂的属性和集合:

var items = new Array();
$('#itemsSelector').each(function () {
    items.push({ id: $(this).val(), name: $(this).text() });
}

var id = $('#id').val();
var title = $('#title').val();
var date = $('#dateTimePicker').val();
var isActive = $('#isActive').val();

$.ajax({
    url: 'SaveFoo',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        id: id, 
        name: title, 
        date: date, 
        isActive: isActive, 
        items: items 
    }),
    success: function(result) {

    }
});

如果您需要支持较旧的浏览器,您可能需要包含脚本,以便
JSON.stringify
函数能够工作。

而且如果我们从学术角度来看:您的$.ajax和$.post之间有什么区别。只有contentType?@Agzam,对了,我已经更新了答案。对于本机不支持
JSON.stringify
方法的旧式浏览器,您需要包含
json2.js
脚本。是的,
$.post
$.ajax
之间唯一的区别是后者允许您设置请求内容类型头:
contentType
。谢谢。。。你又救了我一天!总有一天我会中几十亿美元的彩票,然后我会和你分享你在stackoverflow上的声誉分数。@Agzam,当我能帮助其他开发人员时,我总是很高兴。如果我们从学术角度来看:你的$.ajax和$.post有什么区别。只有contentType?@Agzam,对了,我已经更新了答案。对于本机不支持
JSON.stringify
方法的旧式浏览器,您需要包含
json2.js
脚本。是的,
$.post
$.ajax
之间唯一的区别是后者允许您设置请求内容类型头:
contentType
。谢谢。。。你又救了我一天!总有一天我会在彩票中赢得几十亿美元,然后我会和你分享你在stackoverflow上的声誉分数。@Agzam,当我能帮助其他开发者时,我总是很高兴的。