C# 在MVC中,如何创建更新父模型和所有子模型的视图?

C# 在MVC中,如何创建更新父模型和所有子模型的视图?,c#,asp.net-mvc,database,parent,C#,Asp.net Mvc,Database,Parent,我是MVC的新手,仍在努力阅读和学习诀窍,这个问题已经出现了 如果我有一个模型,比如说用户,看起来像这样: public partial class User { public int ID { get; set; } public string Username { get; set; } public string PasswordHash { get; set; } public string Email { get; set; } public

我是MVC的新手,仍在努力阅读和学习诀窍,这个问题已经出现了

如果我有一个模型,比如说用户,看起来像这样:

public partial class User
{
    public int ID { get; set; }
    public string Username { get; set; }
    public string PasswordHash { get; set; }
    public string Email { get; set; }

    public virtual Child Child { get; set; }
}
以及模型Child,它是父用户的子实体:

public partial class Child
{
    public int ID { get; set;}
    public string Name { get; set; }

    public virtual Toy Toy { get; set; }
}
以及最终模型Toy,它是父模型子模型的子模型:

public partial class Toy
{
    public int ID { get; set; }
    public string ToyName { get; set; }
}
我想创建一个视图,该视图中所有字段都可用,如何编写控制器/视图,以便在所有字段都已填充的情况下正确创建记录?这样ToyName就可以用于合适的玩具,也可以用于合适的孩子,也可以用于合适的用户


这只是我想到的一个例子,因为我想尝试做一个宠物项目来实践MVC,但我似乎找不到很多资料来解释如何做到这一点。

你必须构建你的用户视图模型。这将允许您获取用户->子->玩具数据


您可能必须使用Viewmodels从所有这些不同的表中获取所有数据。看看他们。

这真是直截了当

一个极简主义的例子

查看EditUser.cshtml:

@model WebApplication2.Models.User

@using (Html.BeginForm("SaveUser", "Home", FormMethod.Get))
{
    @Html.LabelFor(m => m.Username)
    @Html.EditorFor(m => m.Username) <br />

    @Html.LabelFor(m => m.Child.Name)
    @Html.EditorFor(m => m.Child.Name) <br/>

    @Html.LabelFor(m => m.Child.Toy.ToyName)
    @Html.EditorFor(m => m.Child.Toy.ToyName) <br />

    <input type="submit" />

}

@JayMason-请了解is-a和has-a关系之间的区别。一个孩子不是玩具,一个孩子有一个玩具。这个问题太广泛了,需要的细节远远超过一篇文章所能提供的。你试过什么?你有什么问题?问一个具体的问题,而不是一般的“我该怎么办?”这个问题太宽泛了,因为你在问我们关于家长/孩子关系类的设计以及它们在MVC中自上而下的使用的指导。回答这个问题需要一篇很长的文章,上面写着正在做出或假设的设计决策。视图和控制器之间是否存在问题?保存到数据库?如何更好地围绕儿童/用户/玩具设计类关系?还有别的吗?请问一个具体的问题。
public ActionResult EditUser(User user)
{
    return View(user);
}

public ActionResult SaveUser(User user)
{
    // Do something with user to save it

    // then show the Edit form again

    return View("EditUser", user);
}