在 MVC 中只传递选定的值?

Passing only selected values in MVC?

我有一个 MVC 应用程序,我想在其中将零个或多个项目类型分配给特定文件。我正在渲染一个页面,其中每个文件都有一行,每个项目类型都有一个带有复选框的列。像这样:

文件1 |翻译 ☐ |编辑 ☐

文件2 |翻译 ☐ |编辑 ☐

为了呈现这个,我创建了一个包含单个文件和项目类型列表的 ViewModel:

public class FileProject
{
    public File ProjectFile = new File();
    public List<ProjectType> ProjectTypes = new List<ProjectType>();
}

然后我将这些列表传递给我的视图:

@model List<MyVerbalInk.ViewModels.FileProject>
@using (Html.BeginForm("Assign", "Order")) {
    @foreach (var f in @Model)
    {
        <tr>
            <td>
                @f.ProjectFile.FileName
            </td>
            <td>
                @for(int i = 0; i < @f.ProjectTypes.Count; i++)
                {
                    <label class="checkbox-inline">
                        @Html.CheckBox("projectTypeId", new { value = @f.ProjectTypes[i].ProjectTypeId }) @f.ProjectTypes[i].Name
                    </label>
                }
            </td>
        </tr>
    }
}

当这篇文章发布时,我想获得 FileProject 对象的列表,其中 ProjectTypes 仅包含已检查的对象:

    [HttpPost]
    public ActionResult Assign(List<FileProject> fileProjects)
    {
        //Do stuff
        return View();
    }

但是fileProjects参数总是空的。如何传回仅包含已检查的 ProjectTypes 的 FileProject 对象集合?

你能测试一下用它来改变你的 BeginForm 吗:

@using (Html.BeginForm("Assign", "Order", FormMethod.Post))

编辑:另一个问题完全相同的问题:MVC4 Complex Type Model is null after post