我正在尝试使用 Ajax 保存在浏览器中创建的场景。数据结构非常简单。主要对象是 Scene
,子对象是 SceneObject
类型。
这是我的 Scene
模型类:
public class Scene
{
[Key]
public int id { get; set; }
[Required]
public string name { get; set; };
public virtual ICollection<SceneItem> sceneItems { get; set; }
}
这是我的 SceneItem
模型类:
public class SceneItem
{
[Key]
public int Id { get; set; }
[Required]
public string name { get; set; }
public float size { get; set;}
public int sceneId { get; set; }
virtual public Scene scene { get; set; }
}
这是我的 Ajax 代码:
var scene ={
sceneItems:[ {
id: 0,
name: "test1",
size: 0.35,
sceneID: 1
},
{
id: 0,
name: "test2",
size: 0.65,
sceneID: 1
}]
}
$.ajax({
type: "POST",
url: "/scene/create",
data: scene
}).done(function (data) {
alert(data);
});
当我执行此 Ajax 调用时,在 ASP.NET MVC 应用程序的调试窗口中,我可以看到所有字段都已填充,除了
virtual public Scene scene { get; set; }
来自我的 SceneItem
模型。这使得 ModelState.IsValid
在我的控制器中返回 false。
我该怎么做才能使这项工作以我可以在单个 AJAX 命令中与许多 SceneItem
对象一起发布 Scene
对象并传递 ModelState.IsValid
并使用 Entity Framework 将其保存到我的数据库中的方式工作?
非常感谢您的帮助。
回答1
将必填字段名称添加到您的 ajax json
var scene ={
id: 0,
name="name",
sceneItems:[
... your data
]
}