将复杂的AJAX发布到MVC控制器

发布于 2025-01-30 15:41:26 字数 1703 浏览 4 评论 0原文

我正在尝试使用Ajax保存在浏览器中创建的场景。数据结构非常简单。主要对象是场景,子对象是cente> sceneObject的类型。

这是我的场景模型类:

public class Scene
{
    [Key]
    public int id { get; set; }
    [Required]
    public string name { get; set; };
    public virtual ICollection<SceneItem> sceneItems { get; set; }
}

这是我的staceItem模型类:

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);
                });

当我在ASP的调试窗口中执行此AJAX调用时。 NET MVC应用程序,我可以看到所有字段均已填充,除了

virtual public Scene scene { get; set; }

我的staceItem模型。这使modelState.isvalid在我的控制器中返回false。

我该怎么做才能以一种可以在单个ajax命令中的sceneItem对象发布场景对象的方式来完成此工作。 并使用实体框架将其保存到我的数据库中?

非常感谢您的任何帮助。

I'm trying to save a scene created in a browser using Ajax. The data structure is pretty simple. Primary object is Scene and child objects are type of SceneObject.

Here is my Scene model class:

public class Scene
{
    [Key]
    public int id { get; set; }
    [Required]
    public string name { get; set; };
    public virtual ICollection<SceneItem> sceneItems { get; set; }
}

And this is my SceneItem model class:

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; }
}

Here is my Ajax code:

    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);
                });

When I execute this Ajax call, in my debug window of the ASP.NET MVC app, I can see all fields are populated except

virtual public Scene scene { get; set; }

from my SceneItem model. And that makes the ModelState.IsValid return false in my controller.

What can I do to make this work in a way that I can post a Scene object along side many SceneItem objects in a single AJAX command and pass ModelState.IsValid and save it into my database using Entity Framework ?

Thank you so much for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栖竹 2025-02-06 15:41:26

将所需的字段名称添加到您的Ajax JSON

var scene ={
             id: 0,
             name="name",
             sceneItems:[ 
              ... your data
              ]
            }

add a required field name to your ajax json

var scene ={
             id: 0,
             name="name",
             sceneItems:[ 
              ... your data
              ]
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文