2011-03-28 178 views
0

我有一个大问题,至少对我而言。 我有一个带有类别和无限子类别的表。 表看起来像这样:类别和子类别MVC2

ID PARENT_ID名称

1空骑

2 1 gallopa

3空图

4 2捕集

还有是包含属于某个类别的项目的表格。 表看起来像这样:

ID cattegory_ID名称

1 4快速

2 1缓慢

3 3高

4 2低

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

我喜欢和@Html.CheckBoxfor一起工作。

有没有人有任何想法?自上周以来,我正在处理这个问题,但没有结果。 我试图递归解决问题,但它没有奏效。 一个例子会很美,非常感谢!

非常感谢您的回答! 一切工作正常!但如何用这个模型做一个Httppost?以及如何获取状态检查或不检查每个复选框?

这里是我的开始:

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

回答

0

你可以创建一个具有类别级作为一种模式,像这样一个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> 

选择。CSHTML

@model StackOverflow_Tester.Models.Choice 

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

在主视图中,你会根据类别简单地渲染partialview:

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

现在,你只需要根类别传递到您的视图

这应该给你带有类别和/或子类别的递归视图。

UPDATE

视图模型/模型看起来是这样的:

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; } 
} 

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

希望这有助于!

+0

谢谢,但你可以显示模型或Viewmodel? – HW90 2011-03-28 14:20:20

+0

以及如何创建复选框? (包括物品的型号) – HW90 2011-03-28 14:21:05

+0

查看我更新的答案。 – 2011-03-28 15:43:59