0

こんにちは、動的メニューを作成しようとしていますが、問題が発生したようです。問題は、アプリケーションを実行すると、最後のカテゴリに属する​​アイテムのみがすべてのカテゴリで繰り返し表示されることです。

間違いを犯した可能性のある場所が 2 つありますが、間違いを犯した場所であるかどうかはわかりません。使用している 2 つのテーブルの図も投稿します。これは図です。

ここに画像の説明を入力

データベースにアクセスするために LINQ TO SQL を使用しており、これを行うために別のクラスを作成しました。データにアクセスするためのコードは次のとおりです。これは、ディクショナリ アルドに項目を追加するときに間違いを犯した可能性がある最初の場所です。デバッガーでこのメソッドをステップオーバーしましたが、問題ないようです。確信が持てないので、投稿しました:

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

2 番目の場所は、データを表示しようとしているときです。これは、表示しようとしたときに間違いを犯したと思われる場所です。コードは次のとおりです。

 @{
                     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、反復ごとにオブジェクトを作成する必要があります。そうしないと、次の単一のリストへの参照があります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 に答える