我有一个带有一些文本字段的表单来填充项目的数据。在此表单中,我想从我的数据库中放置所有可能的类别。我已经创建了一个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填充了所有类别
如果需要更多代码或解释,我会立即回答,但我认为所有必要的信息都可用。
答案 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.cshtml
或Views/SomeController/EditorTemplates/AssignedCategory.cshtml
中。
然后当您的视图@Html.EditorFor(model => model.Categories)
时,它应该为每个AssignedCategory