ASP.NET MVC 5模型绑定列表为空

我坚持这个问题一段时间..

我创建了一个简单的视图模型:

public class AddTranslationViewModel { public List ProjectTranslations { get; set; } public AddTranslationViewModel() { ProjectTranslations = new List(); } } 

ProjectTranslation类:

 public class ProjectTranslation { public int ProjectTranslationId { get; set; } public string Title { get; set; } public string Description { get; set; } public string Address { get; set; } public int LanguageId { get; set; } public Language Language { get; set; } public int ProjectId { get; set; } public Project Project { get; set; } } 

一个使用AddTranslationViewModel的简单视图

  @foreach (var item in Model.ProjectTranslations) { @Html.HiddenFor(modelItem => item.ProjectTranslationId)  } 
@Html.DisplayFor(modelItem => item.Language.LanguageCode) @Html.EditorFor(modelItem => item.Title)

最后我的POST方法:

  public ViewResult AddTranslation(AddTranslationViewModel projectTranslations) { if (ModelState.IsValid) { //... } return View(projectTranslations); } 

这个想法非常基础,我想展示一个可以更改/编辑值的项目列表。

但是,模型绑定不起作用,HTTPPost-Method AddTranslation中的projectsTranslations参数始终为空。

这里的错误是什么?

绑定到对象列表需要创建包含索引的名称的输入字段结构,即:

     

此外,您需要使用Razor的Html.BeginFrom方法将窗体指向Controller中的正确Action方法( 请参阅文档 )。 在你的情况下,它应该是这样的:

 @using(Html.BeginForm("AddTranslation","YourControllerName")) { for (int i=0;i model.ProjectTranslations[i].ProjectTranslationId)   @Html.DisplayFor(model => model.ProjectTranslations[i].Language.LanguageCode)   @Html.EditorFor(model => model.ProjectTranslations[i].Title)   } } 

如果你的方法不是编辑,而是CREATE方法,那么显然你的模型中的List将有0个元素。 在这种情况下,将for循环中的停止条件更改为所需的计数。

请记住,此主题之前已多次讨论过:

ASP.NET MVC在模型中绑定数组

ASP.NET MVC – 无法绑定数组以查看模型