Я пытался зациклить частичные представления, которые используют ту же модель, что и основной вид. По сути, идея заключается в том, что существует страница регистрации, где родитель может зарегистрировать несколько дочерних элементов, информация о дочерних элементах находится в частичном представлении, так что я могу добавить несколько экземпляров в главном представлении.
Я могу заставить частичное представление отображаться несколько раз, но оно сохраняет только первого студента. если я заменю частичное представление (@ Html.Partial ...) на @Html.EditorFor(f => 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>
Частичное представление (_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();
}
}