我正在尝试构建一个诊断工具,因此您从列表中选择一个项目,它会显示另一个列表,您选择另一个列表,依此类推 - 因此诊断问题可以根据需要深入隐藏,例如:
选择:
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_id 到 id 的引用来创建层次结构。
有人可以帮我完成这个难题的最后一部分吗?
谢谢,
标记
答案 0 :(得分:1)
在您的代码cbh
是类型论坛的通用列表,但是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);
}
祝你好运。