0

在我网站的其他部分,我正在使用嵌套列表,并且能够毫无问题地显示和保存。

但是,我似乎无法弄清楚为什么这次它不起作用。

视图模型

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?

4

2 回答 2

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)
}
}
于 2013-09-11T08:20:02.803 回答
0

你可以在 foreach 中创建一个局部视图ActivityService并渲染它:

在您的实际视图中:

@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)
于 2013-09-10T02:06:20.633 回答