2017-10-28 58 views
0

我在我的CSHTML中創建了一個表,我想將==數組的nr項傳回給我的控制器,但這似乎不起作用。任何想法什麼是錯的,或者爲什麼我在我的控制器中得到空引用?我怎樣才能將一個表/數組的多個值傳遞給我的控制器

CSHTML

@using (Html.BeginForm("OrderConfirm", "Beurs", new { vm = Model.Aantal }, method: FormMethod.Post)) 
    { 
<table class="table table-striped table-condensed table-bordered"> 
    <tr> 
     <th> 
      Naam 
     </th> 
     <th> 
      Prijs 
     </th> 
     <th> 
      Minimum prijs 
     </th> 
     <th> 
      Factor 
     </th> 
     <th> Actie</th> 
     <!-- 
     <th>Edit</th>--> 
    </tr> 


     @foreach (var item in Model.ItemLijstVm) 
     { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.Naam) 
       </td> 
       <td> 
        € @Html.DisplayFor(modelItem => item.Prijs) 
       </td> 
       <td> 
        € @Html.DisplayFor(modelItem => item.MinimumPrijs) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Factor) 
       </td> 
       <td> 

         @Html.TextBoxFor(m => m.Aantal[item.Id - 1], new {type = "number" }) 

       </td> 
      </tr> 
     } 

</table> 
<input type="submit" value=" Bevestig bestelling " width="120" /> 
} 

視圖模型

public class BeursLijstViewModel 
{ 
public IEnumerable<BeursItemViewModel> ItemLijstVm{get; set;} 

public string Naam { get; set; } 

public double Crash { get; set; } 

//References naar animated gif 
public bool Event { get; set; } 
public string GifPath { get; set; } 


public int[] Aantal { get; set; } 

public int VerhoogAllePrijzen { get; set; } 

public double Totaal { get; set; } 

public SelectListItem Categorie { get; set; } 

public BeursLijstViewModel(Beurs beurs) 
{ 

    ItemLijstVm= beurs.Items.Select(g => new BeursItemViewModel(g)); 
    Naam = beurs.Naam; 
    Aantal = new int[beurs.Items.Count()]; 
    Totaal = beurs.Totaal; 
} 



} 

控制器

[HttpPost] 
     public ActionResult OrderConfirm(int[] vm) //VM is null but should be array 
     { 
      //Some more code 



     } 

我上我的參考來自我的模型的帖子是空的,但如果我這樣在我的foreach循環中聲明它,它就可以工作。我真的沒有什麼線索出錯:

@using (Html.BeginForm("Add", "Beurs", new { id = item.Id, aantal = Model.Aantal }, method: FormMethod.Post)) 
        { 
         @Html.TextBoxFor(m => m.Aantal[item.Id - 1], new { type = "number" }) 
         <input type="submit" value=" + " width="120"/> 
        } 
+0

一個簡單的方法是從一個對象中取出所有必要的數據並從jquery/angularjs調用控制器的action方法 –

+0

當你做'Html.BeginForm(「OrderConfirm」,「Beurs」,new {vm = Model.Aantal} ,'你是說你正在傳遞'vm'作爲查詢字符串參數,'Model.Aantal'屬性是否被編碼?如果你不打算通過URL來傳遞它,那麼你需要回顧一下如何正確傳遞通過形式體收集和瀏覽器的網絡監視器是在調試這些類型的問題很大的幫助 – Jasen

+0

@RakeshBurbure:我有點缺乏jquery/angular的知識 –

回答

0

我認爲你必須傳回的實際模型不只是陣列期望得到的結果,因爲當其結合它去好幾層,如姓名='模型.item [Z]」

 [HttpPost] 
     public ActionResult OrderConfirm(BeursLijstViewModel vm) 
     { 
       foreach (var item in vm.ItemLijstVm) 
       { 
        var response= vm.Aantal[item.Id - 1] 
       } 
     } 
+0

我改變了我的代碼,但是我的整個模型似乎都是空的。可能是因爲我沒有通過我的URL傳遞它。我不確定爲什麼傳遞一個int id和一個int aantal確實有效? –

0
@using (Html.BeginForm("OrderConfirm", "Beurs", new { vm = Model.Aantal }, method: FormMethod.Post)) 

改變組合上述部件與@COLD的答案告知

@using (Html.BeginForm("OrderConfirm", "Beurs")) 

解決了我的問題。謝謝您的幫助!

相關問題