我有一个带有IList的视图模型:
public class MyMaintenanceListViewModel
{
public IList<MyMaintenance> MyMaintenanceList { get; set; }
[Display(Name = "Network User Name:")]
public string NetworkUserName { get; set; }
[Display(Name = "Password:")]
public string Password { get; set; }
}
我有一个视图,其模型设置为viewmodel:
@model EMMS.ViewModels.MyMaintenanceListViewModel
@using (Html.BeginForm("SubmitMaintenance", "Maintenance"))
{
<table id="searchtable" class="MyMaintenance">
<tr>
<th style="width: 50px; text-align: left;">Id</th>
<th style="width: 200px; text-align: left;">Equipment Id</th>
<th style="width: 100px; text-align: left;">Task Id</th>
<th style="width: 150px; text-align: left;">Date Completed</th>
<th style="width: 100px; text-align: left;">Elapsed Time</th>
<th style="width: 200px; text-align: left;">Created</th>
<th style="width: 50px;"></th>
</tr>
@for (int i = 0; i < Model.MyMaintenanceList.Count; i++)
{
var item = Model.MyMaintenanceList[i];
<tr>
<td>
@Html.DisplayFor(modelItem => item.RowId)
@Html.HiddenFor(modelItem => item.RowId)
</td>
<td>
@Html.DisplayFor(modelItem => item.EquipmentId)
</td>
<td>
@Html.DisplayFor(modelItem => item.TaskId)
</td>
<td>
@Html.DisplayFor(modelItem => item.DateCompleted)
</td>
<td>
@Html.DisplayFor(modelItem => item.ElapsedTimeMinutes)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreateDate)
</td>
</tr>
}
</table>
}
我的控制器看起来像这样:
[HttpPost]
public ActionResult SubmitMaintenance(MyMaintenanceListViewModel myMaintenanceListViewModel)
{
// do something with IList "MyMaintenanceList" in myMaintenanceListViewModel
}
但是,当我断开上面的控制器post方法并提交表单时,myMaintenanceListViewModel中的MyMaintenanceList列表表示count = 0,即使视图中有项目。如何将此表中的项目传递给控制器中的post方法?
我正在尝试迭代控制器中MyMaintenanceList列表中的项目。希望这是有道理的。
由于
答案 0 :(得分:1)
MVC模型绑定使用输入元素的name属性将表单数据绑定到模型。 首先,您不应该在for循环中创建项目变量。你应该绑定这样的数据:
<tr>
<td>
@Html.DisplayFor(modelItem => Model.MyMaintenanceList[i].RowId)
@Html.HiddenFor(modelItem => Model.MyMaintenanceList[i].RowId)
</td>
</tr>
其次,如果将数据发布到服务器,则应使用输入类型元素。因此,如果要将数据发布到RowId旁边的服务器,则必须将 Html.HiddenFor 用于MyMaintenanceList的其他属性。
希望这有帮助。
答案 1 :(得分:0)
除了简单的CRUD应用之外,接受[HttpPost]方法的视图模型是不好的形式。 ViewModel用于查看,而非用于发布。
相反,请尝试:
[HttpPost]
public ActionResult SubmitMaintenance(IList<MyMaintenance> myMaintenanceList)
{
//Validate and then send to database
}