从一个视图中保存两个实体

时间:2013-07-19 07:59:55

标签: asp.net asp.net-mvc-4 entity-framework-4

enter image description here如何从一个视图中保存两个实体。假设我有两个实体党和一对多关系的人。现在我需要从Party View中保存这两个实体。我正在使用ASP.NET MVC4。

public partial class Cm_Opt_Pty_Party_S
{
    public Cm_Opt_Pty_Party_S()
    {
        this.Cm_Opt_Psn_Person_S = new HashSet<Cm_Opt_Psn_Person_S>();
    }

    public int Pty_ID { get; set; }
    public Nullable<int> Pty_PARTYTYPECODE { get; set; }
    public string Pty_FULLNAME { get; set; }
    public string Pty_GOVTID { get; set; }
    public Nullable<int> Pty_GOVTIDTC { get; set; }
    public Nullable<int> Pty_GOVTIDSTAT { get; set; }

    public virtual ICollection<Cm_Opt_Psn_Person_S> Cm_Opt_Psn_Person_S { get; set; }
}

2 个答案:

答案 0 :(得分:1)

您可以做的是创建ViewModel此类将包含创建两个实体所需的相关属性。

然后,您将View替换为ViewModel,然后将其传递给控制器​​。

如果要保存实体,可以构建单独的实体并保存它们。

答案 1 :(得分:1)

我对您的问题有了更好的理解,因此请编辑此答案以显示我将使用的解决方案。

您的Controller会将Party对象传送到您的视图以显示Party信息。使用循环可以显示集合中包含的项目。

@foreach(var m in Model.Persons)
{
    @Html.DisplayFor(model=>m.FirstName)
    @Html.DisplayFor(model=>m.Surname)
}

如果要在集合中添加更多项目,则需要呈现包含用于添加Person的表单的部分视图或新视图。它将被强类型化为Person模型,接收帖子的Controller操作将期待Person

例如,如果Person只有FirstNameSurnamePartyId,则表单会在您的视图中使用这些帮助

@Html.TextboxFor(m=>m.FirstName)
@Html.TextboxFor(m=>m.Surname)
@Html.TextBoxFor(m=>m.PartyId)

然后将其提交回控制器,并具有将人员添加到集合中的逻辑。然后使用Party模型返回包含Persons集合中新添加的Person的模型。

使用@Ajax.BeginForm或某些自定义Jquery / Javascript,您可以处理此异步,以防止在此过程中刷新页面。

如果您不想这样做,另一个选项是EditorTemplates。例如:ASP.NET MVC LIST and Create in same view