在我的网站的其他部分,我正在使用嵌套列表,并且能够毫无问题地显示和保存。
然而,我似乎无法弄清楚为什么这次不工作。
视图模型
public class ActivityEditViewModel
{
//Activity
public int ActivityID { get; set; }
//... more properties
public List<ActivityService> ActivityServices { get; set; }
public class ActivityService
{
public int ServiceID { get; set; }
[DisplayName("Outcome Comment")]
public string OutcomeComment { get; set; }
//... more properties
}
}
查看(相关部分)
@for (int i = 0; i < Model.ActivityServices.Count; i++)
{
@Html.HiddenFor(x => x.ActivityServices[i].ServiceID)
@Html.LabelFor(x => Model.ActivityServices[i].OutcomeComment)
@Html.TextBoxFor(x => Model.ActivityServices[i].OutcomeComment)
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(ViewModels.ActivityEditViewModel vm)
{
//vm.ActivityServices <== is always null
问题
为什么vm.ActivityServices
会返回null?
答案 0 :(得分:0)
您可以为ActivityService
创建部分视图,并在foreach中进行渲染:
在您的实际视图中:
@foreach(ActivityService item in Model.ActivityServices)
{
@Html.Partial("ActivityService", item)
}
在新的部分视图ActivityService.cshtml中:
@model Proyect.Models.ActivityEditViewModel.ActivityService
@Html.HiddenFor(m => m.ServiceID)
@Html.LabelFor(m => m.OutcomeComment)
@Html.TextBoxFor(m => m.OutcomeComment)
答案 1 :(得分:0)
所以你的设计Razor语法必须如下:
您可以首先删除所有跳过元素,方法是添加一行代码以便删除,然后正常使用它来获取所需的记录。
@
{
Model.ActivityServices.RemoveAll(o=> //your skip condition);
for (int i = 0; i < Model.ActivityServices.Count; i++)
{
@Html.HiddenFor(x => Model.ActivityServices[i].ServiceID)
@Html.LabelFor(x => Model.ActivityServices[i].OutcomeComment)
@Html.TextBoxFor(x => Model.ActivityServices[i].OutcomeComment)
}
}