0

嗨,我正在尝试创建一个动态菜单,但我似乎遇到了一些麻烦。问题是,当运行应用程序时,只有属于最后一个类别的项目会针对所有类别重复显示。

有两个地方我可能犯了错误,但我不能确定是否是我犯的地方我还将发布我正在使用的两个表的图表。这是图表:

在此处输入图像描述

我正在使用 LINQ TO SQL 来访问数据库并创建了一个单独的类来执行此操作。这是用于访问数据的代码。这是我在将项目添加到 Dictionary 时可能犯错误的第一个地方我用调试器跨过这个方法,它似乎没问题我不能确定所以我发布了它:

public Dictionary<string , List<string>> subCatByCatList() {
        Dictionary<string , List<string>> SubcatByCat = new Dictionary<string , List<string>>();

        var subcategoriesByCategory = from category in dataContext.Categories
                                      join subcategory in dataContext.SubCategories
                                          on category.CatId equals subcategory.CatId
                                          into cs
                                      select new {
                                          CategoryName = category.CatName ,
                                          SubCategories = cs
                                      };

        List<string> subcategories = new List<string>();

        foreach( var category in subcategoriesByCategory ) {
            string CategoryName = category.CategoryName;
            subcategories.Clear();

            foreach( var subCategory in category.SubCategories ) {
                subcategories.Add(subCategory.SubCatName);
            }
            SubcatByCat.Add(CategoryName , subcategories);
        }
        return SubcatByCat;
    }

第二个地方是当我尝试显示数据时。这是我最有可能认为我在尝试显示数据时犯了错误的地方。这是代码:

 @{
                     ComputerStoreDataAccess data = new ComputerStoreDataAccess();
                     Dictionary<string, List<string>> nav = data.subCatByCatList();

                     <ul>
                         @foreach (var category in nav)
                         {
                             <li><a href="#">@category.Key</a></li>

                             foreach (var subcategory in category.Value)
                             {
                                 <div>
                                     <ul>
                                         <li>@subcategory</li>
                                     </ul>
                                 </div>
                             }
                         }
                     </ul>
                 }

编辑

在此处输入图像描述

4

1 回答 1

4

在此循环中,您必须在每次迭代时创建subcategories对象,否则您将引用 a 中的单个列表SubcatByCat

foreach( var category in subcategoriesByCategory ) {
            string CategoryName = category.CategoryName;
            subcategories = new List<string>(); // <-- create new object!

            foreach( var subCategory in category.SubCategories ) {
                subcategories.Add(subCategory.SubCatName);
            }
            SubcatByCat.Add(CategoryName , subcategories);
        }
于 2012-12-21T17:26:52.083 回答