在MVC中,如何创建将更新父模型以及所有子模型的视图?

时间:2018-12-12 17:58:46

标签: 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 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是对父模型Child的子模型:

public partial class Toy
{
    public int ID { get; set; }
    public string ToyName { get; set; }
}

我想创建一个视图,该视图将具有适用于所有视图的字段,我将如何编写控制器/视图,以便如果所有字段都被填充,它将正确创建记录?这样,“玩具名称”将用于适当的玩具,即将用于适当的孩子,又将用于适当的用户?

这只是我在想的一个例子,因为我想尝试创建一个喜欢MVC的小项目,而我似乎找不到太多的资料来解释如何做。

3 个答案:

答案 0 :(得分:0)

您将不得不搭建用户ViewModel。这将允许您获取用户->儿童->玩具数据。

https://blogs.msdn.microsoft.com/mcsuksoldev/2013/09/20/managing-entity-relationships-with-mvc-scaffolding/

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这很简单。

一个极简主义的例子。

视图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" />

}

Home控制器中的操作方法:

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