2017-02-03 73 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

快乐编码;)

相关问题