填充列表呈现id的字符串而不是MVC4 razor的复选框

时间:2013-05-29 18:36:16

标签: c# asp.net-mvc asp.net-mvc-4 razor

我有一个带有一些文本字段的表单来填充项目的数据。在此表单中,我想从我的数据库中放置所有可能的类别。我已经创建了一个viewmodel,就像这个问题的答案所示:

Saving Many to Many relationship data on MVC Create view

当我渲染页面时,会显示所有ID,而不是每个元素的复选框。这是我的一些代码。

public ActionResult Metcat()
        {
            var projectCategoriesViewmodel = new ProjectCategory { Categories = PopulateCategories() };

            return View(projectCategoriesViewmodel);
        }

private ICollection<AssignedCategory> PopulateCategories()
        {
            var categories = Adapter.CategoryRepository.GetAll()

            var assignedCategories = new List<AssignedCategory>();
            foreach (var cat in categories)
            {
                assignedCategories.Add(new AssignedCategory
                {
                    CategoryID = cat.CategoryID,
                    CategoryName = cat.CategoryName,
                    Assigned = false
                });
            }
            return assignedCategories;
        }

CSHTML文件


@model ProjectCategory
@using Freelauncher.Models

<h2>Metcat</h2>


@using (Html.BeginForm("CreateProject", "Category", FormMethod.Post))
{
    @Html.ValidationSummary(true)

    <fieldset>

        @Html.DisplayFor(model => model.Project.ProjectTitle)
        @Html.EditorFor(model => model.Project.ProjectDescription-

        @Html.EditorFor(model => model.Categories)

    </fieldset>

    <p>
        <input type="submit" value="Create" />
    </p>    
}

如您所见,viewModel填充了所有类别 enter image description here

输出

enter image description here

如果需要更多代码或解释,我会立即回答,但我认为所有必要的信息都可用。

1 个答案:

答案 0 :(得分:1)

我认为你错过了为AssignedCategory创建编辑器模板的部分:

@model YourNamespace.AssignedCategory

<fieldset>
    @Html.HiddenFor(model => model.CategoryID)    
    @Html.CheckBoxFor(model => model.Assigned)
    @Html.DisplayFor(model => model.CategoryName)
</fieldset>

如果您不希望所有控制器都可以使用它,则应该在Views/Shared/EditorTemplates/AssignedCategory.cshtmlViews/SomeController/EditorTemplates/AssignedCategory.cshtml中。

然后当您的视图@Html.EditorFor(model => model.Categories)时,它应该为每个AssignedCategory

调用此模板