Post Viewmodel包含多个列表

时间:2017-02-03 10:36:33

标签: c# asp.net-mvc asp.net-mvc-5

我有一个包含2个列表的viewmodel:

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

当我访问这些viewmodel以创建工作正常的视图时

@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)

现在,当我点击提交按钮时,我可以看到viewmodel对象vm收到两个模型的NULL。

3 个答案:

答案 0 :(得分:0)

您应该参考模型中的每个列表。

value当您使用Html Helpers时,属性将自动初始化

使用此代码应该有效:

@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>                    
}

答案 1 :(得分:0)

使用@ Html.EditorFor解决此问题

答案 2 :(得分:0)

问题是命名约定,在我浏览了Stephen Muecke提到的stackoverflow之后的文章后得到了解决。

这是针对其他开发人员的,如果他们遇到像我一样的情况。请先阅读这篇文章,这真的有很大帮助。

Post an HTML Table to ADO.NET DataTable

快乐的编码;)