考虑这两个视图模型
public class PersonViewModel
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public int PersonAge {get; set;}
public virtual PersonJobSplitViewModel JobSplit { get; set; } // hold each split
public virtual List<PersonJobSplitViewModel> JobSplits { get; set; } //contain all splits
}
public class PersonJobSplitViewModel
{
public int PersonJobSplitId { get; set; }
public int PersonId { get; set; }
public string JobRole { get; set; }
public decimal SplitPercentage { get; set; }
public virtual PersonViewModel PersonViewModel { get; set; }
}
每个人可以有1-3个工作岗位。
我有一个绑定到PersonViewModel
的创建视图,在我的控制器的GET方法中,我正在创建一个容量为3的List<PersonJobSplitViewModel>
实例,并将其分配给PersonViewModel.JobSplits
< / p>
@model MySolution.Web.ViewModels.PersonViewModel
...
@for (var i = 0; i < Model.JobSplits.Capacity; i++)
{
@Html.EditorFor(model => model.JobSplit.JobRole);
@Html.EditorFor(model => model.JobSplit.SplitPercentage);
}
这会导致角色和百分比输入呈现给视图3次。我的POST方法期待PersonViewModel
但PersonViewModel.JobSplits
正在null
。 JobSplit
属性包含我的3个分裂中的一个,正如我所期望的那样。
那么如何将与其完整的JobSplits列表绑定的模型发布到控制器?
我发现以前已经回答过类似的事情,但我似乎无法找到与 MVC5 相关的直接解决方案,并且涉及将列表标记为大型模型,因为它只是传递控制器列表。
更新
我现在尝试执行以下操作
@for (var i = 0; i < Model.JobSplits.Capacity; i++)
{
@Html.EditorFor(model => model.JobSplits[i].JobRole);
@Html.EditorFor(model => model.JobSplits[i].SplitPercentage);
}
但我明白了:
指数超出范围。必须是非负数且小于 集合。参数名称:index
答案 0 :(得分:0)
发布后直接解决了这个问题。
<强>控制器强>
//Prep view Model
PersonViewModel viewModel = new PersonViewModel();
List<PersonJobSplitViewModel> instantiatedSplitCount = new List<PersonJobSplitViewModel>(3);
for (int i = 0; i < 3; i++)
{
instantiatedSplitCount.Add(null);
}
viewModel.JobSplits = instantiatedSplitCount;
return View(viewModel);
查看强>
@for (var i = 0; i < Model.JobSplits.Count(); i++)
{
@Html.EditorFor(model => model.JobSplits[i].JobRole);
@Html.EditorFor(model => model.JobSplits[i].SplitPercentage);
}
似乎检查容量是问题,在我通过之前将3个空值分配给列表,然后检查计数是解决方案。
在我的控制器中并不漂亮,但如果其他人可以建议更多语法解决方案,请分享。