1

我有一个带有一些文本字段的表单来填写项目的数据。在这个表格上,我想从我的数据库中放置所有可能的类别。我创建了一个视图模型,如这个问题的答案所示:

在 MVC 创建视图上保存多对多关系数据

当我渲染我的页面时,所有的 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 填充了所有类别 在此处输入图像描述

输出

在此处输入图像描述

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

4

1 回答 1

1

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

@model YourNamespace.AssignedCategory

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

如果您不希望它对所有控制器都可用,则应该是 inViews/Shared/EditorTemplates/AssignedCategory.cshtml或 in 。Views/SomeController/EditorTemplates/AssignedCategory.cshtml

然后,当您的视图执行此操作时,@Html.EditorFor(model => model.Categories)它应该为每个 AssignedCategory 调用此模板

于 2013-05-29T18:53:01.597 回答