模型绑定泛型列表在 asp.net mvc 中为 null
本文关键字:net mvc 中为 null asp 绑定 泛型 列表 模型 | 更新日期: 2023-09-27 17:56:55
我在索引中的剃刀中绑定对象.html:
视图
@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>
}
我已经用小提琴手抓取了发送到我的动作参数的数据,得到了这个:
item.UnitId=5&
item.Name=111111111111&
item.ErrorText=fsdddddddddddddddd+&
item.UnitId=5&
item.Name=+&
item.ErrorText=dddddd+&
行动
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;
}
为什么我的单位实例为空?属性匹配,因此应绑定它们!
我忽略了什么吗?
您需要使用 for
循环而不是foreach
循环。此外,最好使模型类具有一个集合属性。
您的模型可能是这样的:
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>
}