类别和子类别MVC2

时间:2011-03-28 07:11:03

标签: asp.net-mvc-2 categories

我有一个大问题,至少对我而言。 我有一个包含类别和无限子类别的表。 该表如下所示:

ID Parent_ID名称

1空骑

2 1 gallopa

3 null figure

4 2捕手

并且有一个表格包含属于某个类别的项目。 该表如下所示:

ID cattegory_ID名称

1 4快速

2 1慢

3 3高

4 2低

现在我想从数据库中检索它们并在我的mvc2应用程序中显示它们,如下所示: 第一个类别的字段集,以及之前字段集中子类别的字段集。这些项应该在带有复选框的字段集中列出。 http://i.stack.imgur.com/lyMWD.png

我喜欢与@Html.CheckBoxfor合作。

有人有任何想法吗?我上周以来一直在研究这个问题而没有结果。 我尝试递归地解决问题,但它没有用。 一个例子是美丽的,非常感谢!

非常感谢您的回答! 一切正常!但是如何用这个模型做一个Httppost?以及如何检查状态是否已检查每个复选框?

这是我的开始:

   [HttpPost]
    public ActionResult CreateNewHorse(NewHorseModel collection)
    {
      collection.Cattegories.Count(); <------------is always null! Why?
    }

1 个答案:

答案 0 :(得分:0)

您可以创建一个将Category-class作为模型的PartialView,如下所示:

<强> Category.cshtml

@model Category

<fieldset>
    <legend>@Model.Name</legend>
    @foreach (var item in Model.Choices)
    {
        Html.RenderPartial("Choice", item);
    }

    @foreach(var item in Model.Subcategories)
    {
        Html.RenderPartial("Category", item);
    }
</fieldset>

<强> Choice.cshtml

@model StackOverflow_Tester.Models.Choice

<p>@Html.LabelFor(m => m.Selected) @Html.CheckBoxFor(m => m.Selected)</p>

在主视图中,您只需根据类别呈现部分视图:

@foreach (var item in Model)
{
    Html.RenderPartial("Category", item);
}

现在您只需要将根类别传递到视图中

这应该为您提供包含类别和/或子类别的递归视图。

<强>更新

viewmodel / model看起来像这样:

<强> Category.cs

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Category> Subcategories { get; set; }
    public List<Choice> Choices { get; set; }
    public Category Parent { get; set; }
}

<强> Choice.cs

public class Choice
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Selected { get; set; }
}

我也更新了顶部的代码,以反映此模型

希望这有帮助!