如何从一个视图中保存两个实体。假设我有两个实体党和一对多关系的人。现在我需要从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; }
}
答案 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
只有FirstName
,Surname
和PartyId
,则表单会在您的视图中使用这些帮助
@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