asp.net mvc中的模型绑定通用列表为null

我在index.html的razor foreach中绑定对象:

视图

@using (Ajax.BeginForm("Save", "Unit", new AjaxOptions { OnSuccess = "onSuccess" })) {   @foreach (var item in Model) {  @Html.HiddenFor(modelItem => item.UnitId)  } 
@Html.EditorFor(modelItem => item.Name) @Html.EditorFor(modelItem => item.ErrorText)
}

我用fiddler抓住了发送到我的action参数的数据,得到了这个:

 item.UnitId=5& item.Name=111111111111& item.ErrorText=fsdddddddddddddddd+& item.UnitId=5& item.Name=+& item.ErrorText=dddddd+& 

行动

 public ActionResult Save(List 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循环。 此外,最好使您的Model类具有属性集合。

你的模型可能是这样的:

 public class UnitsViewModel { public List 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++) {  @Html.HiddenFor(m => m.Units[i].UnitId)  @Html.EditorFor(m => m.Units[i].Name)   @Html.EditorFor(m => m.Units[i].ErrorText)   }