仅传递MVC中的选定值?

时间:2015-01-20 18:11:22

标签: asp.net asp.net-mvc asp.net-mvc-4

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

File1 |翻译☐|编辑☐

File2 |翻译☐|编辑☐

为了渲染这个,我创建了一个包含单个文件和项目类型列表的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参数始终为null。如何传回仅包含已检查的ProjectTypes的FileProject对象集合?

1 个答案:

答案 0 :(得分:1)

你可以测试用这个改变你的BeginForm:

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

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