UnitsChecked Class(Model)
public class UnitsChecked
{
public bool IsChecked { get; set; }
public TaxiTV.Data.Entity.Unit Unit { get; set; }
}
ReportsVM(查看模型类)
public class ReportsVM
{
public IEnumerable<UnitsChecked> UnitList { get; set; }
public ReportsVM()
{
UnitList = new List<UnitsChecked>();
}
}
Index.cshtml(查看)
@using (Ajax.BeginForm("GetReports", "Reports", new AjaxOptions { UpdateTargetId = "ReportList", LoadingElementId = "loader" }))
{
<table class="tableBorder">
<tr>
<th>Choose
</th>
<th>
@Resources.IMEI
</th>
<th>
@Resources.SIM
</th>
<th>
@Resources.Name
</th>
</tr>
@for (int i = 0; i < Model.UnitList.Count(); i++ )
{
<tr>
<td>
@Html.CheckBoxFor(m => m.UnitList.ElementAt(i).IsChecked, new { @class = "checkboxListener" })
</td>
<td>
@Html.DisplayFor(m=> m.UnitList.ElementAt(i).Unit.IMEI)
@Html.Hidden("zzz", Model.UnitList.ElementAt(i)) <---- This line
</td>
<td>
@Model.UnitList.ElementAt(i).Unit.SIM
</td>
<td>
@Model.UnitList.ElementAt(i).Unit.Person.FirstName @Model.UnitList.ElementAt(i).Unit.Person.LastName
</td>
</tr>
}
</table>
}
主要且最重要的一行是箭头指向的位置。 使用Fiddler2我设法看到所有UnitsChecked列表都是逐个发送的。 以下控制器说&#34; zzz&#34;是空的。
[HttpPost]
public ActionResult GetReports(ReportsVM rvm, List<UnitsChecked> zzz)
{
有什么建议吗? 谢谢。
答案 0 :(得分:0)
您需要将属性UnitList
更改为typeof IList<UnitsChecked>
,然后在视图中
@for (int i = 0; i < Model.UnitList.Count; i++ )
{
@Html.CheckBoxFor(m => m.UnitList[i].IsChecked, new { @class = "checkboxListener" })
@Html.DisplayFor(m=> m.UnitList.[i].Unit.IMEI)
@Html.HiddenFor(m=> m.UnitList.[i].Unit.SomeProperty) // for any properties of Unit that you want posted back
}
这将使用索引器正确地命名控件,以便它们可以绑定到集合,即
<input type="checkbox" name="UnitList[0].IsChecked" .. value="True" />
<input type="hidden" name="UnitList[0].IsChecked" .. value="False" />
<input type="checkbox" name="UnitList[1].IsChecked" .. value="True" />
<input type="hidden" name="UnitList[1].IsChecked" .. value="False" />
您当前使用的.ElementAt(i)
正在为控件提供重复的id
属性(无效的html)和name
属性(因此无法绑定到集合)。
您的控制器需要只是
[HttpPost]
public ActionResult GetReports(ReportsVM rvm)