Asp.net mvc 在循环ParialView中引用列表

Asp.net mvc 在循环ParialView中引用列表,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我一直在尝试循环局部视图,它们与主视图共享相同的模型。基本上,这个想法是,有一个注册页面,家长可以注册多个孩子,孩子信息在部分视图中,这样我就可以在主视图中添加多个实例 我可以多次显示局部视图,但它只保存第一个学生。如果我替换部分视图@Html.partial。。。如果在主视图中使用@Html.EditorForf=>f.student[i].Person.FirstName,则效果良好,我可以添加多个文本框并保存多个学生 如何使用局部视图并能够传入ParentModel并正确引用它 希望这一切

我一直在尝试循环局部视图,它们与主视图共享相同的模型。基本上,这个想法是,有一个注册页面,家长可以注册多个孩子,孩子信息在部分视图中,这样我就可以在主视图中添加多个实例

我可以多次显示局部视图,但它只保存第一个学生。如果我替换部分视图@Html.partial。。。如果在主视图中使用@Html.EditorForf=>f.student[i].Person.FirstName,则效果良好,我可以添加多个文本框并保存多个学生

如何使用局部视图并能够传入ParentModel并正确引用它

希望这一切都有意义。。。感谢您的帮助。谢谢

型号:

public partial class Person()
{
    public string FirstName { get; set; }
}

public partial class Student
{
    public int Student_PersonID { get; set; }
    public int Father_PersonID { get; set; }

    public virtual Person Father { get; set; }
    public virtual Person Person { get; set; }
 }

public class ParentModel
{
    public List<Student> student { get; set; }
}
主视图

@model WebPortal.Models.ParentModel

<div>
   @for (int i = 0; i < cnt; i++)
   {
       @Html.Partial("_StudentPartial", Model, new ViewDataDictionary { { "loopIndex", i.ToString() } });
   }
</div>
<div>
      @Html.EditorFor(f => f.student[0].Father.FirstName)
</div>
部分视图\u StudentPartial

@model WebPortal.Models.ParentModel
@{
     int i = Convert.ToInt32(ViewData["loopIndex"].ToString());
 }
@using (Html.BeginForm())
{
       <div class="editor-field">
           @Html.EditorFor(m => m.student[i].Person.FirstName)
       </div>
}
控制器

public ActionResult Register(ParentModel pm)
{
   using (var db = new SMEntities())
   {
      for (int i = 0; i < pm.student.Count; i++)
      {
         if (i != 0)
         {
            pm.student[i].Father = pm.student[0].Father;
         }

         db.Students.Add(pm.student[i]);
      }

      db.SaveChanges();
   }
}

更好的组织方式如下:

像这样为学生键入_StudentPartial视图-

@model WebPortal.Models.Student
@using (Html.BeginForm())
{
       <div class="editor-field">
           @Html.EditorFor(m => m.Person.FirstName)
       </div>
}
然后像这样对主视图建模:

@model WebPortal.Models.ParentModel

<div>
   @for (int i = 0; i < cnt; i++)
   {
       @Html.Partial("_StudentPartial", Model.student[i]);
   }
</div>
<div>
      @Html.EditorFor(f => f.student[0].Father.FirstName)
</div>

尝试将此作为指导原则:仅向视图提供它所需的信息,而不是更多信息。

这样做会导致null exception errorObject reference未设置为对象实例。在主视图中,Model.student[i]为空。。。