-1

カテゴリという名前のリストが 1 つあります。以下のデータが含まれています。

Name  -                  Id 
----------------------------
Mobile  -                 0
Cellphones -             21
Mobile Accessories -     22
Camera -                  0
Camcorder -              55
Camera Accessories       60
SLRs                     61
Photo Printers           63
Computers                0
Laptops                  65
Memory Cards             67
Monitors                 69
RAM                      70
Computer Accessories     71

そして、UlタグとLiタグを使用して、上記のデータを次のように表示したい:

モバイル

-携帯電話

-モバイルアクセサリー

カメラ

-ビデオカメラ

-カメラアクセサリー

-一眼レフ

-フォトプリンター

コンピュータ

-ラップトップ

-メモリーカード

-モニター

-羊

-コンピュータアクセサリー

つまり、id=0 は親カテゴリを意味し、id=0 以外はサブカテゴリを意味します。

助けてください。よろしくお願いします。

4

2 に答える 2

0

ここで、これをあなたの見解に入れます:

<ul>
    <li>Mobile
      <ul>
          <li>Cellphones</li>
          <li>Mobile Accessories</li>
      </ul>
    </li>    
    <li>Camera
      <ul>
          <li>Camcorder</li>
          <li>Camera Accessories</li>
          <li>SLRs</li>
          <li>Photo Printers</li>
      </ul>
    </li>    
    <li>Computers
      <ul>
          <li>Laptops</li>
          <li>Memory Cards</li>
          <li>Monitors</li>
          <li>RAM</li>
          <li>Computer Accessories</li>
      </ul>
    </li>    
</ul>

それがあなたが求めていることですが、もう少し何かを望んでいると思います。

あなたの質問やあなたの試みには具体的なものがないため、次の解決策ではいくつかの仮定が行われています。

クラス:

public class Category
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<Category> Subcateogries { get; set; }

  public Category()
  {
    Subcateogries = new List<Category>();
  }
}

コントローラ:

public ActionResult Index()
{
  //The Data
  var categories = new List<Category>
  {
    new Category { Id = 0, Name = "Mobile" },
    new Category { Id = 21, Name = "Cellphones" },
    new Category { Id = 22, Name = "Mobile Accessories" },
    new Category { Id = 0, Name = "Camera" },
    new Category { Id = 55, Name = "Camcorder" },
    new Category { Id = 60, Name = "Camera Accessories" },
    new Category { Id = 61, Name = "SLRs" },
    new Category { Id = 63, Name = "Photo Printers" },
    new Category { Id = 0, Name = "Computers" },
    new Category { Id = 65, Name = "Laptops" },
    new Category { Id = 67, Name = "Memory Cards" },
    new Category { Id = 69, Name = "Monitors" },
    new Category { Id = 70, Name = "RAM" },
    new Category { Id = 71, Name = "Computer Accessories" }
  };

  var GroupedData = new List<Category>();

  foreach(var category in categories)
  {
    if(category.Id == 0)
    {
      GroupedData.Add(category);
    }
    else
    {
      GroupedData.Last().Subcateogries.Add(category);
    }
  }

  return View(GroupedData);
}

意見:

@model List<Category>

<h2>Categories</h2>

<ul>
  @foreach (var topCategory in Model)
  {
    <li>@topCategory.Name
      <ul>
        @foreach (var subCategory in topCategory.Subcateogries)
        {
          <li>@subCategory.Name</li>
        }
      </ul>
    </li>    
  }
</ul>

これは、開始リスト (この場合はカテゴリ) が希望する順序になっているという前提で作成されます。また、 GroupedDataを作成したときに、元のリスト項目を再利用するだけで近道をしました。また、2 つのレベルしか存在しないことも想定されています。

部分ビューを利用して複数のレベルを処理するようにビューをリファクタリングできますが、それは問題の一部ではありませんでした。

于 2012-11-22T03:23:22.863 に答える
0
Namespace Test

Public Class Class1

    Dim Categories As List(Of Category) = New List(Of Category) _
                                          From {New Category With {
                                                .ID = 0, .Name = "Mobile",
                                                .Items = New List(Of CategoryItem) _
                                                    From {New CategoryItem With {.ID = 1, .Name = "Cellphones"},
                                                          New CategoryItem With {.ID = 2, .Name = "Mobile Accessories"}
                                                         }
                                                },
                                                New Category With {
                                                .ID = 1, .Name = "Camera",
                                                .Items = New List(Of CategoryItem) _
                                                    From {New CategoryItem With {.ID = 1, .Name = "Camcorder"},
                                                          New CategoryItem With {.ID = 2, .Name = "Camera Accessories"},
                                                          New CategoryItem With {.ID = 3, .Name = "SLRs"},
                                                          New CategoryItem With {.ID = 4, .Name = "Photo Printers"}
                                                         }
                                                },
                                                New Category With {
                                                .ID = 2, .Name = "Computers",
                                                .Items = New List(Of CategoryItem) _
                                                    From {New CategoryItem With {.ID = 1, .Name = "Laptops"},
                                                          New CategoryItem With {.ID = 2, .Name = "Memory Cards"},
                                                          New CategoryItem With {.ID = 3, .Name = "Monitors"},
                                                          New CategoryItem With {.ID = 4, .Name = "RAM"},
                                                          New CategoryItem With {.ID = 5, .Name = "Computer Accessories"}
                                                         }
                                                }
                                                }

    Public Sub New()
     Dim ul As String =  SetCategories()
    End Sub

    Private Function SetCategories() As String
        Dim ulCategories As XElement = <ul class="float-left"></ul>

        For Each cat As Category In Categories
            Dim currentCategory As Category = cat
            Dim liCategory As XElement = <li><%= currentCategory.Name %></li>
            Dim ulCategoryItems As XElement = <ul></ul>
            For Each item As CategoryItem In currentCategory.Items
                Dim currentItem As CategoryItem = item
                Dim liItem As XElement = <li><%= currentItem.Name %></li>
                ulCategoryItems.Add(liItem)
            Next item
            liCategory.Add(ulCategoryItems)
            ulCategories.Add(liCategory)
        Next cat

        Return ulCategories.ToString()

    End Function

End Class

Public Class Category

    Public Property ID As Integer
    Public Property Name As String
    Public Property Items As List(Of CategoryItem)

End Class

Public Class CategoryItem
    Public Property ID As Integer
    Public Property Name As String
End Class

End Namespace
于 2012-11-22T02:30:17.410 に答える