2017-02-03 71 views
0

我有由2只列出一個視圖模型:後視圖模型包含多個列表

public class RandomViewmodel 
{ 
     public List<Model1> Model1 { get; set; } 
     public List<Model2> Model2 { get; set; } 
} 

當我訪問這些視圖模型創建視圖工作正常

@for (int i = 0; i < Model.Model1.Count(); i++) 
{ 
    x = i; 
    var item = Model.Model1.ElementAt(i); 
    <tr>     
    <td> 
     @Html.Editor("[" + i + "].Amount", new { htmlAttributes = new { @class = "form-control", @Value = item.Amount } })      
    </td> 
</tr> 
} 

@for (int k=0; k < Model.Model2.Count; k++) 
{ 
x = x + 1; 
var bacc = Model.Model2.ElementAt(k); 
@Html.Hidden("[" + k + "].ID", bacc.ID, new { htmlAttributes = new { @id = "[" + k + "].ID" } }) 

<tr style="font-weight:bold;"> 
    <td style="padding-left: 25px;"> 
      @(x+1) @bacc.name 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.Editor("[" + k + "].MiscAmount1", new { htmlAttributes = new { @class = "form-control" } }) 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.Editor("[" + k + "].MiscAmount2", new { htmlAttributes = new { @class = "form-control" } }) 
    </td> 
</tr>      
} 

這裏是我的控制器操作:

[HttpPost] 

public ActionResult Index(RandomViewModel vm) 

現在,當我擊中提交按鈕,我可以看到兩個模型的視圖模型對象vm都收到NULL。

+0

你生成'name'屬性不具有關係在所有模型 - 其'@for(INT I = 0;我 m.Model1 [i] Amount)}'和第二個循環的類似。 –

+0

並參考[這個答案](http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943)瞭解如何綁定到集合 –

+0

name屬性屬於我的觀點模型的第二個模型 public List Model2 {get;組;此外,在我看來,這些數據還是不錯的。但是,當提交值時,後動作視圖模型接收爲空 –

回答

0

您應該參考模型中的每個列表。

value屬性將被自動初始化當您使用HTML輔助

使用此代碼它應該工作:

@for (int i = 0; i < Model.Model1.Count(); i++) 
{ 
x = i; 
var item = Model.Model1.ElementAt(i); 
<tr>     
    <td> 
     @Html.EditorFor(m => m.Model1[i].Amount, new { @class = "form-control"})      
    </td> 
</tr> 
} 


@for (int k=0; k < Model.Model2.Count; k++) 
{ 
x = x + 1; 
var bacc = Model.Model2.ElementAt(k); 
@Html.HiddenFor(m => m.Model2[i].ID) 
<tr style="font-weight:bold;"> 
    <td style="padding-left: 25px;"> 
      @(x+1) @bacc.name 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.EditorFor(m => m.Model2[i].MiscAmount1, new { @class = "form-control" }) 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.EditorFor(m => m.Model2[i].MiscAmount2, new { @class = "form-control" }) 

    </td> 
</tr>      
} 
0

使用@ Html.EditorFor來解決這個問題

0

的問題在於命名約定,在我閱讀由stackoverflow的Stephen Muecke提及的以下文章後,該約定得到解決。

這是給其他開發者的,如果他們被困在和我一樣的情況下。請首先閱讀這篇文章,它確實幫助了很多。

Post an HTML Table to ADO.NET DataTable

快樂編碼;)

相關問題