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 – 无法绑定数组以查看模型
- 无法为内容类型multipart配置Web API
- 带集合的模型 – Html.ListBoxFor不设置所选项
- 实体类型ApplicationUser不是当前上下文的模型的一部分
- MVC 5中的System.Data.Entity.Core.ProviderIncompatibleexception
- 将所有区域,控制器和动作作为树
- MVC5 EF实体显然正在保存,但在检索时为null
- mvc 5表中的SelectList,DropDownList为空值
- facebook登录成功后,ExternalLoginConfirmation返回null
- .NET Framework中的复杂声明值与System.Security.Claims