0

我正在尝试构建一个诊断工具,因此您从列表中选择一个项目,它会显示另一个列表,您选择另一个,依此类推-因此可以根据需要将诊断问题隐藏得尽可能深,例如:

从中挑选:

Software - Microsoft - Outlook - How do I?
                               - Errors 
                     - Word    - How do I?
                               - Errors
                     - Excel   - How do I?
                               - Errors

         -Lotus 

Hardware -PC
         -Laptop 

Network  -Firewall

这些将在表中定义为:

id  parent_id Title
1   0         Software
2   0         Hardware
3   0         Network
4   1         Microsoft
5   1         Lotus
6   4         Outlook
7   4         Word
8   4         Excel
9   5         How do I?
10  5         Errors
...etc

我已经看到了对 MVCSiteMap 的引用——我以类似的方式使用了 webforms 站点地图——但这需要是动态的,以便面包屑显示以下链接:

Software > Microsoft > Excel > How do I? > Freeze panes

我的表模型是:

public class Forum
{
    public int id { get; set; }
    public int parent_id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

我的控制器中的代码是:

     var bc = db.Fora.FirstOrDefault(i => i.id == id);
        var cbh = new List<Forum>();
        if (bc != null)
        {
            var parent = bc.parent_id;
            while (parent != null)
            {
                cbh.Insert(0, parent);
                parent = parent.Parent;
            }
        }

我要做的是建立一个新的论坛列表,然后我可以列出并从中生成面包屑。我遇到困难的地方是:

 cbh.Insert(0, parent);
 parent = parent.Parent;

我怀疑我的控制器代码在这两行中有错误,或者我的论坛模型需要从parent_idid的引用来创建层次结构。

谁能帮我完成我的最后一块拼图?

谢谢,

标记

4

1 回答 1

1

在你的代码cbh中是一个 Forum 类型的通用列表,但是parent如果是 int 类型,你会在你的时候得到一个类型错误cbh.Insert(0, parent);,你应该做的更像是这样:

var bc = db.Fora.FirstOrDefault(i => i.id == id);
var cbh = new List<Forum>(); 
while (bc != null) 
{
    cbh.Insert(0, bc);
    bc = db.Fora.FirstOrDefault(i => i.id == bc.parent_id);
}

祝你好运。

于 2013-03-22T15:03:41.213 回答