0

Я работаю над небольшим проектом. Цель состоит в том, чтобы поддерживать присутствие нескольких пользователей в определенные конкретные даты. Эти даты сначала выбираются пользователем.Возвращаясь viewmodel из представления дает объект ampty в контроллере

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

В самом представлении я каждый день прохожу в данной модели вида, и я позволяю виду генерировать тег и объект редактора (Html.EditorFor()). Все это окружено созданием формы (@ Html.BeginForm()). Предоставление представления не является проблемой.

Проблема в том, когда я пытаюсь вернуть модель представления. Объект viewmodel, который я получаю, представляет собой объект с нулевыми объектами сам по себе. Подобно тому, как он был создан конструктором по умолчанию.

Контроллер:

[HttpGet] 
    public ActionResult OpldagenLt() 
    { 
     var lt = _gebruikerRepository.GeefTraject(_gebruikerRepository.TrajectId); 
     List<DatumModel> data = new List<DatumModel>(); 
     foreach (Opleidingdag opldag in lt.GeefOpleidingdagenKleinerDanOfGelijkAanVandaag()) 
      data.Add(new DatumModel(opldag)); 

     List<ToekomstModel> toekomst = new List<ToekomstModel>(); 
     foreach (Opleidingdag opldag in lt.GeefOpleidingdagenGroterDanVandaag()) 
      toekomst.Add(new ToekomstModel(opldag)); 

     DataModel datamod = new DataModel(); 
     datamod.Datums = data; 
     datamod.Toekomst = toekomst; 

     if (lt.ControleerAantalOpleidingdagen()) 
     { 
      _gebruikerRepository.GekozenDagen = GekozenDagen(datamod) as List<Opleidingdag>; 
      return RedirectToAction("Index", "Aanwezigheid"); 
     } 
     return View(datamod); 
    } 

    [HttpPost] 
    public ActionResult OpldagenLt(DataModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     _gebruikerRepository.GekozenDagen = GekozenDagen(model) as List<Opleidingdag>; 

     return RedirectToAction("Index", "Aanwezigheid"); 
    } 

    public ICollection<Opleidingdag> GekozenDagen(DataModel datamod) 
    { 
     List<Opleidingdag> dagen = new List<Opleidingdag>(); 
      foreach (DatumModel datum in datamod.Datums) 
      { 
       dagen.Add(datum.Dag); 
      } 
     return dagen; 
    } 

Вид:

@using(@Html.BeginForm("OpldagenLt", "Leertraject", FormMethod.Post)) 
{ 
<div> 
    <table> 
     <tr> 
      <th colspan="2">reeds begonnen dagen</th> 
     </tr> 
     @foreach (var item in @Model.Datums) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.Dag.Dag.Day)/@Html.DisplayFor(modelItem => item.Dag.Dag.Month)/@Html.DisplayFor(modelItem => item.Dag.Dag.Year)</td> 
       <td>@Html.EditorFor(modelItem => item.Checked)</td> 
      </tr> 
     } 
    </table> 
</div> 
<div id="toekomst"> 
    <table> 
     <tr> 
      <th>Dagen in de toekomst</th> 
     </tr> 
     @foreach (var item in @Model.Toekomst) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.Dag.Dag.Day)/@Html.DisplayFor(modelItem => item.Dag.Dag.Month)/@Html.DisplayFor(modelItem => item.Dag.Dag.Year)</td> 
      </tr> 
     } 
    </table> 
</div> 
<div> 
    <p><input type="submit" value="Volgende"/></p> 
</div> 
} 

Модель:

using System; 
using System.Collections.Generic; 
using ProjectII.Models.domain; 

namespace ProjectII.Viewmodels 
{ 
public class DataModel 
{ 
    public DataModel() 
    { 
     Datums = new List<DatumModel>(); 
    } 

    public ICollection<DatumModel> Datums { get; set; } 
    public ICollection<ToekomstModel> Toekomst{ get; set; } 
} 

public class DatumModel 
{ 
    public DatumModel() 
    { 
     Dag = new Opleidingdag(new DateTime().Date); 
     Checked = true; 
    } 
    public DatumModel(Opleidingdag opldag) 
    { 
     Dag = opldag; 
     Checked = true; 
    } 

    public Opleidingdag Dag { get; set; } 
    public bool Checked { get; set; } 
} 

public class ToekomstModel 
{ 
    public ToekomstModel() 
    { 
     Dag = new Opleidingdag(new DateTime().Date); 
    } 
    public ToekomstModel(Opleidingdag opldag) 
    { 
     Dag = opldag; 
    } 

    public Opleidingdag Dag { get; set; } 
} 
} 

Заранее спасибо за помощь

+0

У вас есть ваша '@ модель', заявленная в представлении? –

+0

Вы имеете в виду это? @model ProjectII.Viewmodels.DataModel – pythox101

+0

Вы получаете объект, содержащий нулевые объекты. Вы имеете в виду, что 'ProjectII.Viewmodels.DataModel' не является нулевым, но свойства' Datums' и 'Toekomst' равны нулю? Или элементы в «List » и 'List ' null? При отладке объекты «data» и «toekomst» правильно заполняются, когда вы назначаете их свойствам 'datamod'? – Stephen

ответ

0

@stephen: спасибо за помощь. с учетом вашего ответа, я, наконец, смог вернуть эти данные.

Я изменил Еогеасп в течение и изменил ICollection к списку

Модель:

using System; 
using System.Collections.Generic; 
using ProjectII.Models.domain; 


namespace ProjectII.Viewmodels 
{ 
public class DataModel 
{ 
    public List<DatumModel> Datums { get; set; } 
    public List<ToekomstModel> Toekomst{ get; set; } 
} 

public class DatumModel 
{ 
    public DatumModel() 
    { 
     Dag = new Opleidingdag(new DateTime().Date); 
     Checked = true; 
    } 
    public DatumModel(Opleidingdag opldag) 
    { 
     Dag = opldag; 
     Checked = true; 
    } 

    public Opleidingdag Dag { get; set; } 
    public bool Checked { get; set; } 
} 

public class ToekomstModel 
{ 
    public ToekomstModel() 
    { 
     Dag = new Opleidingdag(new DateTime().Date); 
    } 
    public ToekomstModel(Opleidingdag opldag) 
    { 
     Dag = opldag; 
    } 

    public Opleidingdag Dag { get; set; } 
} 
} 

вид:

@model ProjectII.Viewmodels.DataModel 

@using(@Html.BeginForm()) 
{ 
<div> 
    <table> 
     <tr> 
      <th colspan="2">reeds begonnen dagen</th> 
     </tr> 

     @for (int i = 0; i < Model.Datums.Count; i++) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => Model.Datums[i].Dag.Dag.Day)/@Html.DisplayFor(modelItem => Model.Datums[i].Dag.Dag.Month)/@Html.DisplayFor(modelItem => Model.Datums[i].Dag.Dag.Year)</td> 
       <td> 
        @Html.EditorFor(modelItem => Model.Datums[i].Checked) 
       </td> 
      </tr> 
     } 
    </table> 

    @*@for (int i = 0; i < Model.Datums.Count; i++) 
    { 
     <div> @Html.DisplayFor(x => Model.Datums[i].Dag.Dag) 
      @Html.CheckBoxFor(x => Model.Datums[i].Checked) </div> 
    }*@ 

</div> 
<div id="toekomst"> 
    <table> 
     <tr> 
      <th>Dagen in de toekomst</th> 
     </tr> 
     @foreach (var item in @Model.Toekomst) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.Dag.Dag.Day)/@Html.DisplayFor(modelItem => item.Dag.Dag.Month)/@Html.DisplayFor(modelItem => item.Dag.Dag.Year)</td> 
      </tr> 
     } 
    </table> 
</div> 
<div> 
    <p><input type="submit" value="Volgende"/></p> 
</div> 
} 

Теперь я получаю модель с нужными значениями

благодарит за помощь

0

с тем, как вы построить ваш взгляд, ModelBinder не может различать стирать между различными элементами в списке и не распознавать их как элементы в списке. Попробуйте построить такой вид:

@{ int datumteller = 0; } 
@foreach (var item in @Model.Datums) 
{ 
     <tr> 
      <td>@Html.DisplayFor(modelItem => @Model.Datums[datumteller].Dag.Dag.Day)/@Html.DisplayFor(modelItem => @Model.Datums[datumteller].Dag.Dag.Month)/@Html.DisplayFor(modelItem => @Model.Datums[datumteller].Dag.Dag.Year)</td> 
      <td>@Html.EditorFor(modelItem => @Model.Datums[datumteller].Checked)</td> 
     </tr> 
datumteller++; 
} 

@{ int toekomstteller = 0; } 
@foreach (var item in @Model.Toekomst) 
{ 
     <tr> 
      <td>@Html.DisplayFor(modelItem => @Model.Toekomst[toekomstteller].Dag.Dag.Day)/@Html.DisplayFor(modelItem => @Model.Toekomst[toekomstteller].Dag.Dag.Month)/@Html.DisplayFor(modelItem => @Model.Toekomst[toekomstteller].Dag.Dag.Year)</td> 
     </tr> 
    toekomstteller++ 
    } 
+0

, поэтому вы имеете в виду просто добавление в представление, подобное этому, или мне нужно добавить дополнительный код в другое место? – pythox101

+0

просто добавьте их вместо ваших циклов foreach – Stephen

+0

, так как я должен достичь каждого объекта? – pythox101

Смежные вопросы