我在index.html中的razor foreach中绑定对象:
查看
@using (Ajax.BeginForm("Save", "Unit", new AjaxOptions { OnSuccess = "onSuccess" }))
{
<button type="submit" class="btn btn-default" id="saveUnits"><i class="fa fa-save"></i></button>
<table>
<tbody>
@foreach (var item in Model)
{
<tr>
@Html.HiddenFor(modelItem => item.UnitId)
<td>
@Html.EditorFor(modelItem => item.Name)
</td>
<td>
@Html.EditorFor(modelItem => item.ErrorText)
</td>
</tr>
}
</tbody>
</table>
}
我已经使用fiddler抓取了发送到我的action参数的数据并得到了这个:
item.UnitId=5&
item.Name=111111111111&
item.ErrorText=fsdddddddddddddddd+&
item.UnitId=5&
item.Name=+&
item.ErrorText=dddddd+&
ACTION
public ActionResult Save(List<Unit> units )
{
return new EmptyResult();
}
视图模型
public class Unit
{
[HiddenInput(DisplayValue = false)]
public int UnitId { get; set; }
[DataType(DataType.MultilineText)]
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string ErrorText { get; set;
}
为什么我的单位实例为空?属性匹配所以它们应该绑定!
我忽略了什么吗?
答案 0 :(得分:2)
您需要使用for
循环而不是foreach
循环。此外,最好使您的Model类具有属性集合。
您的模型可能类似于:
public class UnitsViewModel
{
public List<Unit> Units { get; set; }
public class Unit
{
[HiddenInput(DisplayValue = false)]
public int UnitId { get; set; }
[DataType(DataType.MultilineText)]
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string ErrorText { get; set; }
}
}
您可以在cshtml中执行以下操作:
@for (int i = 0; i < Model.Count; i++)
{
<tr>
@Html.HiddenFor(m => m.Units[i].UnitId)
<td>
@Html.EditorFor(m => m.Units[i].Name)
</td>
<td>
@Html.EditorFor(m => m.Units[i].ErrorText)
</td>
</tr>
}