C# 发布的模型(通过jQuery)返回时所有属性都设置为默认值

C# 发布的模型(通过jQuery)返回时所有属性都设置为默认值,c#,jquery,asp.net-mvc,ajax,C#,Jquery,Asp.net Mvc,Ajax,我从MVC应用程序中获取大部分数据作为模型,并在客户端对其进行操作。当我处理完用户正在做的任何事情后,我只需将模型/模型数组发回服务器 在一个特定的场景中,我将把一个包含两个模型的数组发回应用程序。我可以在HTTP中看到模型的所有值……但是当它们被反序列化并传递给我的控制器时,它们会显示为“空”——也就是说,所有属性都设置为默认值,但集合中有两个元素 你知道这是什么原因吗?听起来MVC无法将HTTP反序列化为强类型对象,但我不明白为什么,因为HTTP中的一切“看起来”都正常。是否有我可能错过的过

我从MVC应用程序中获取大部分数据作为模型,并在客户端对其进行操作。当我处理完用户正在做的任何事情后,我只需将模型/模型数组发回服务器

在一个特定的场景中,我将把一个包含两个模型的数组发回应用程序。我可以在HTTP中看到模型的所有值……但是当它们被反序列化并传递给我的控制器时,它们会显示为“空”——也就是说,所有属性都设置为默认值,但集合中有两个元素

你知道这是什么原因吗?听起来MVC无法将HTTP反序列化为强类型对象,但我不明白为什么,因为HTTP中的一切“看起来”都正常。是否有我可能错过的过程

如果这很重要,我尝试过将数据作为IList和MyModel[]类型的形式参数“接收”,但似乎没有帮助

我很难想出具体的代码,但这里是——也许这会有帮助

// Client side

var models = new Array();
for(var i in selectedModels) {
    var item = selectedModels[i];

    if(typeof(item) != 'function') {
        models.push(item);
    }
}

$.ajax({
    type: "POST",
    data: { myModels: models, name: "" },
    dataType: "json",
    url: "/json/my-controller/create-models",
    success: function (data, successCode, httpRequest) {
        // Do some stuff
    }
})

// Server Side

[HttpPost, ActionName("create-models")]
public ActionResult DoSomething(MyModel[] myModels)
{
    if(myModels == null || myModels.Length < 1)
    {
        throw new InvalidOperationException("You must provide at least one model to add to the collection.");
    }

    // Do someother stuff...
    return Json(someNewModel);
}
//客户端
var models=新数组();
for(选定模型中的变量i){
变量项=所选模型[i];
if(项目类型)!=“功能”){
模型。推送(项目);
}
}
$.ajax({
类型:“POST”,
数据:{myModels:models,名称:'},
数据类型:“json”,
url:“/json/my controller/create models”,
成功:函数(数据、成功代码、httpRequest){
//做点什么
}
})
//服务器端
[HttpPost,ActionName(“创建模型”)]
公共行动结果DoSomething(MyModel[]myModels)
{
if(myModels==null | | myModels.Length<1)
{
抛出新的InvalidOperationException(“您必须提供至少一个要添加到集合中的模型。”);
}
//做些别的事。。。
返回Json(someNewModel);
}
请参阅本文。在发布之前,您需要使用库对数据进行字符串化。stringify方法允许序列化JavaScript数据结构,以便通过http进行传输。然后,您需要一个Json模型绑定器来帮助重建对象服务器端

您的js代码如下所示:

var models = new Array();
for(var i in selectedModels) {
    var item = selectedModels[i];

    if(typeof(item) != 'function') {
        models.push(item);
    }
}

var postdata = JSON.stringify(models);

$.ajax({
    type: "POST",
    data: postdata ,
    dataType: "json",
    url: "/json/my-controller/create-models",
    success: function (data, successCode, httpRequest) {
        // Do some stuff
    }
})

诸如此类,希望避免额外的步骤…谢谢,我明天早上会看看这是否有帮助。