创建具有1:n关系和一个视图的复杂实体

时间:2016-04-08 12:34:32

标签: c# asp.net-mvc entity-framework razor

我被要求更新使用MVC实体框架构建的体育俱乐部的CRM系统。该系统现在可以通过允许俱乐部的工作人员创建一个核心帐户来添加孩子和笔记。这些是核心类

帐户类

    public class Account
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Telephone { get; set; }
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string TownCity { get; set; }
        public string RegionCounty { get; set; }
        public string PostCode { get; set; }
        public string Email { get; set; }
        public virtual ICollection<Child> Children { get; set; }
        public virtual ICollection<SecondaryContact> SecondaryContacts { get; set; }
        public virtual ICollection<Note> Notes { get; set; }
        public virtual ICollection<JobTask> JobTasks { get; set; } 
    }

儿童班

    public class Child
    {
        public int Id { get; set; }
        public int AccountId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DateOfBirth { get; set; }
        public string SchoolName { get; set; }
        public string MedicalConditions { get; set; }
        public int SchoolYear { get; set; }
        public MembershipTypes MembershipType { get; set; }
        public AccountStatusTypes AccountStatus { get; set; }
        public virtual ICollection<Session> AttendedSessions { get; set; } 
        public virtual Account Account { get; set; }
    }

目前,公司办公室的用户创建一个帐户,然后将孩子添加到帐户;拥有一个帐户是创建孩子的先决条件。

该公司的管理层希望为其网站推出面向客户的新前端,客户可以在该网站上注册并支付子女加入体育俱乐部的费用。然而,他们还向我展示了一个新的流程“流程”,其中所有信息必须在一个页面上进行。因此,要求客户创建一个帐户,然后让他们逐个添加他们的孩子(与办公室员工在他们的管理面板中一样)是不可能的。

我认为核心问题是,是否可以创建一个可以填充这两个实体的视图,或者更确切地说,我可以从视图中添加到帐户中的子项列表吗?请记住,一个帐户可能有多个孩子?我已经看过类似的情况,但似乎所有接近我正在寻找的东西都是添加已经预定义的数据。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用Account作为ViewModel并使用Children属性提交已创建的子项 - 通过&#34;预填充&#34;带有空子的集合或通过提供某种&#34;添加&#34; -function(使用相同的帐户重新加载页面,但集合中还有一个空的子项)。

在视图中,您可以使用for循环为子项添加输入元素 - foreach不起作用,因为模型绑定器需要索引变量在post上重新创建集合-back:

@for (int i = 0; i < Model.Children.Count; ++i)
{
    @Html.TextBoxFor(m => m.Children[i].FirstName)
    @* ...and so on... *@
}

我在我的应用程序中使用了这样的构造,它工作正常。

相关问题