C# 发布的模型(通过jQuery)返回时所有属性都设置为默认值
我从MVC应用程序中获取大部分数据作为模型,并在客户端对其进行操作。当我处理完用户正在做的任何事情后,我只需将模型/模型数组发回服务器 在一个特定的场景中,我将把一个包含两个模型的数组发回应用程序。我可以在HTTP中看到模型的所有值……但是当它们被反序列化并传递给我的控制器时,它们会显示为“空”——也就是说,所有属性都设置为默认值,但集合中有两个元素 你知道这是什么原因吗?听起来MVC无法将HTTP反序列化为强类型对象,但我不明白为什么,因为HTTP中的一切“看起来”都正常。是否有我可能错过的过程 如果这很重要,我尝试过将数据作为IList和MyModel[]类型的形式参数“接收”,但似乎没有帮助 我很难想出具体的代码,但这里是——也许这会有帮助C# 发布的模型(通过jQuery)返回时所有属性都设置为默认值,c#,jquery,asp.net-mvc,ajax,C#,Jquery,Asp.net Mvc,Ajax,我从MVC应用程序中获取大部分数据作为模型,并在客户端对其进行操作。当我处理完用户正在做的任何事情后,我只需将模型/模型数组发回服务器 在一个特定的场景中,我将把一个包含两个模型的数组发回应用程序。我可以在HTTP中看到模型的所有值……但是当它们被反序列化并传递给我的控制器时,它们会显示为“空”——也就是说,所有属性都设置为默认值,但集合中有两个元素 你知道这是什么原因吗?听起来MVC无法将HTTP反序列化为强类型对象,但我不明白为什么,因为HTTP中的一切“看起来”都正常。是否有我可能错过的过
// 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
}
})
诸如此类,希望避免额外的步骤…谢谢,我明天早上会看看这是否有帮助。