0

在此处输入图像描述如何从一个视图中保存两个实体。假设我有两个实体 Party 和 Person 具有一对多关系。现在我需要从派对视图中保存两个实体。我正在使用 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; }
}
4

2 回答 2

1

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

然后你基于你ViewViewModel,然后将它传递给控制器​​。

当您想要保存实体时,您可以构建单独的实体并保存它们。

于 2013-07-19T09:40:42.240 回答
1

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

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

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

当您想将更多项目添加到集合中时,您将需要呈现包含用于添加Person. 它将被强类型化为Person模型,并且接收帖子的控制器操作将期待一个Person

例如,如果 aPerson有一个FirstNameSurname并且PartyId表单将在您的视图中使用这些助手

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

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

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

如果您不想这样做,另一个选项是 EditorTemplates。例如,请参见此处:ASP.NET MVC LIST 并在同一视图中创建

于 2013-07-19T09:42:39.973 回答