ссылка на список <Model>в циклическом ParialView - PullRequest
0 голосов
/ 10 октября 2011

Я пытался зациклить частичные представления, которые используют ту же модель, что и основной вид. По сути, идея заключается в том, что существует страница регистрации, где родитель может зарегистрировать несколько дочерних элементов, информация о дочерних элементах находится в частичном представлении, так что я могу добавить несколько экземпляров в главном представлении.

Я могу заставить частичное представление отображаться несколько раз, но оно сохраняет только первого студента. если я заменю частичное представление (@ 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();
   }
}

1 Ответ

0 голосов
/ 10 октября 2011

Лучший способ структурировать вещи будет так:

Введите _StudentPartial View для Student, как это -

@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>

Попробуйте использовать это в качестве руководства: предоставьте на рассмотрение только ту информацию, которая ему нужна, не более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...