项目重复显示

时间:2012-12-21 17:14:17

标签: asp.net-mvc asp.net-mvc-3

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

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

enter image description here

我正在使用LINQ TO SQL来访问数据库,并创建了一个单独的类来执行此操作。这是访问数据的代码。这是我在将项添加到的第一个地方。字典aldo我用调试器调试了这个方法,似乎没关系,所以我发布了它:

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

修改

enter image description here

1 个答案:

答案 0 :(得分:4)

在此循环中,您必须在每次迭代时创建subcategories对象,否则您在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);
        }