2013-05-24 3 views
0

이 문제를 해결할 수있는 사람이 있습니까? 내가 컨트롤러에 내 사용자 정의 viewmodel의 ienumerable 또는 그냥 간단한 목록을 전달하고 싶습니다. 내 코드 프로그래머 :MVC 전달 IEnumerable 컨트롤러

@model IEnumerable<WebWareApp.ViewModels.OstukorvVM> 
@{ 
ViewBag.Title = "Ostukorv"; 
} 
<h2>Hetkel ostukorvis olevad tooted:</h2> 
@using (Html.BeginForm("Create", "ToodeTellimuses")) 
{ @Html.AntiForgeryToken() 
<table> 
<tr> 
    <th>Tootenimi</th> 
    <th>Tootegrupp</th> 
    <th>Tootja</th> 
    <th>Mõõdud</th> 
    <th>Varvus</th> 
    <th>Hind</th> 
    <th>Vali Kogus</th> 
    <th></th> 
</tr> 
@{if (Model != null) 
    { 

    foreach (var item in Model) 
    {<tr> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Nimi) 
      @Html.HiddenFor(modelitem => item.Toode.Nimi) 
     </td> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Tootegrupp.Nimetus) 
      @Html.HiddenFor(modelitem => item.Toode.Tootegrupp.Nimetus) 
     </td> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Tootja) 
      @Html.HiddenFor(modelitem => item.Toode.Tootja) 
     </td> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Pikkus) x @Html.DisplayFor(modelitem => item.Toode.Laius) x @Html.DisplayFor(modelitem => item.Toode.Korgus) 
     @Html.HiddenFor(modelitem => item.Toode.Pikkus) @Html.HiddenFor(modelitem => item.Toode.Laius) @Html.HiddenFor(modelitem => item.Toode.Korgus) 
     </td> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Varvus) 
      @Html.HiddenFor(modelitem => item.Toode.Varvus) 
     </td> 
     <td> 
      @Html.DisplayFor(modelitem => item.Toode.Hind) 
      @Html.HiddenFor(modelitem => item.Toode.Hind) 
     </td> 
     <td> 
      @Html.EditorFor(modelitem => item.kogus) 

     </td> 
     <td> 
      @String.Format("Laos olemas {0}",item.Toode.Kogus) 
      @Html.HiddenFor(modelitem => item.Toode.Kogus) 
     </td> 
     </tr> 
     } 
    }} 
    </table> 
<input type="submit" value="Telli"> 
} 

을 그러나 문제는 내 컨트롤러에 내가 들어오는 모델 필드는 항상 내가 여기 내 뷰 모델 및 모델과 컨트롤러를 게시 할 수 있습니다 필요한 null.If debugg 때이다.

+0

모델 바인딩이 작동하려면 for 루프로 전환해야합니다. http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx를 참조하십시오. –

+0

그렇다면 목록에있는 항목에 어떻게 액세스 할 수 있습니까? 나는 더 이상 "modelitem => item.Toode.Value"를 사용할 수 없다. 그리고 나는 m => m [i]를 사용할 수없는 것처럼 보인다. Toode.Value. – Marek

답변

1

foreach 루프를 for 루프로 교체하면 트릭을 수행 할 수 있습니다. 나는이 문제를 알고있는 것처럼

for (var i = 0; i < Model.Count; i++) { 
    @Html.HiddenFor(m => Model[i].Toode.Value) 
} 
+0

좋아, 아픈 시도! 감사. 그렇다면 목록에있는 항목에 어떻게 액세스 할 수 있습니까? 나는 더 이상 "modelitem => item.Toode.Value"를 사용할 수 없다. 그리고 나는 m => m [i]를 사용할 수없는 것처럼 보인다. Toode.Value. – Marek

+0

@Marek 편집을 참조하십시오 –

+0

컨트롤러에 해당 목록을 가져 오기 위해 for 루프 용으로 모든 propertys를 html.hidden으로 값을 지정해야합니까? – Marek

0

, 당신은 @model는 IEnumerable을 얻고있는 것은 널 바로 의미?

당신이 널 (null) 동안 그 체크하기 전에 컨트롤러에서 목록을 반환하고 난 이해가

+0

나는보기에서 모든 정보를 recive 그리고 난뿐만 아니라 사용자에게 그것을 보여줄 수 있습니다. 그러나 나는 그 관점에서 모든 정보를 다른 참가자에게 전달해야합니다. – Marek

+0

Count()> 0을 확인하는 대신 Any()를 사용해야합니다. – Bryan

0

확인 작동하는지 나에게 귀하의 의견을 알려이

if (db.OstukorvVMs != null && db.OstukorvVMs.Count() > 0) 
      { 
       return View(db.OstukorvVMs.ToList()); 
      } 
      return View(); 

처럼 돌아 오면 다음 확인 .

모델 데이터를 IEnumerator<WebWareApp.ViewModels.OstukorvVM> 유형으로 변환 해보십시오.

IEnumerator<WebWareApp.ViewModels.OstukorvVM> ienut = model.GetEnumerator(); 

While(ienut.MoveNext()) 
{ 
    ///what ever you want to do 

    console.WriteLine(ienumerator.Current.ToString()); 
} 

이후에도 모든 값을 모델로 가져올 수 있지만이 시간은 더 이상 null이 아닙니다. 피드백을 보내주십시오.

+0

모델을 전달할 제어기와 컨트롤러를 게시하십시오.이 모델을 전달할 컨트롤러 – Het

관련 문제