我有一个包含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。
答案 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
快乐的编码;)