从自引用类别表构建和呈现无限分层类别树

时间:2010-04-13 11:06:33

标签: asp.net-mvc linq-to-sql hierarchical-trees

我有一个Categories表,其中每个类别都有ParentId,可以引用我要显示为多级HTML列表的任何其他类别的CategoryId,如下所示:

<ul class="tree">
    <li>Parent Category
        <ul>
            <li>1st Child Category
                <!-- more sub-categories -->
            </li>
            <li>2nd Child Category
                <!-- more sub-categories -->
            </li>
        </ul>
    </li>
</ul>

目前,我递归渲染局部视图并传递下一个类别。它工作得很好,但这是错误的,因为我正在视图中执行查询。

如何在每次需要所有层次结构类别的列表时将列表呈现为树对象并将其缓存以便快速显示?

1 个答案:

答案 0 :(得分:1)

创建一个自引用的视图模型类。

使用您在视图中执行的查询将其填充到相应的模型类中(或者可能在您的DataContext部分类中)。

在检查结果并将结果存储在Cache的方法中包装执行查询的方法。

确保在对类别树进行更改时使缓存无效。

如果查询执行了大量查询(每个树级别一个),则考虑将类别表的内容作为平面列表,然后使用linq对象将其投影到视图模型类中。